如何在 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,它是混乱的根源,并计算xyr作为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.xi 值计算出来,无需其他输入。这里是有效的:

x = a.x + i * 30

【讨论】:

我做到了。它使代码更简单,但输出仍然不是所需的输出。 我想通了。谢谢。

以上是关于如何在 C++ 中按递增顺序绘制球体网格?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ggplot中按指定顺序绘制值向量?

如何在 Xamarin Forms 中按顺序显示(出现)元素

如何绘制 3D 球体?

如何快速绘制三维球体呢?

如何在 3D 对象(如球体)上绘制文本

如何在使用QuTiP绘制Bloch球体时给出aplot标题