如何在 C++ 中按递增顺序绘制球体网格?
Posted
技术标签:
【中文标题】如何在 C++ 中按递增顺序绘制球体网格?【英文标题】:How to draw a grid of spheres in increasing order in C++? 【发布时间】:2017-09-24 01:29:58 【问题描述】:我一直在尝试按半径递增的顺序绘制球体网格(上面的图片链接),但是我尝试过的所有循环都失败了。我做了下面的循环,因为我认为对于 x 的一个值,y 值会递增并完全绘制,然后 x 会递增并重复整个过程。但那是行不通的。我应该做出哪些改变?
'a'是一个属于类的变量,包含球体的坐标和半径。
a.x = -500, a.y = -500, a.z = 0, a.r=0;
for (int i = 0; i < 500; i++, a.x += 30, a.r++)
for (int j = 0; j < 10; j++, a.y += 30, a.r++)
drawSphere(a.x + (2 * a.r), a.y, a.z, a.r);
【问题讨论】:
了解drawSphere
的作用以及您应该如何使用它会有所帮助。为什么不专注于独立于drawSphere
调用而正确获取数据?
"drawSphere(double x, double y, double z, double r)" 前三个是坐标,第三个是半径。该函数使用给定的数据绘制一个球体。
那么您应该正确使用它,但我认为您的方法是错误的,您从未在每个循环中重置 y
。为什么不去掉a
,它是混乱的根源,并计算x
、y
和r
作为i and
j的函数?
我不明白“使用'a'作为'i'和'j'的fn.”
【参考方案1】:
导出值而不是试图操纵某种计数器:
for (int i = 0; i < 500; i++)
for (int j = 0; j < 10; j++)
drawSphere(a.x + i * 30, a.y + j * 30, a.z, a.r + i + j);
“作为函数”是一个数学术语,表示您需要的 x
的最终值可以从 a.x
和 i
值计算出来,无需其他输入。这里是有效的:
x = a.x + i * 30
【讨论】:
我做到了。它使代码更简单,但输出仍然不是所需的输出。 我想通了。谢谢。以上是关于如何在 C++ 中按递增顺序绘制球体网格?的主要内容,如果未能解决你的问题,请参考以下文章