在OpenGL中为行星绘制轨道试验[关闭]
Posted
技术标签:
【中文标题】在OpenGL中为行星绘制轨道试验[关闭]【英文标题】:Drawing orbit trial for a planet in OpenGL [closed] 【发布时间】:2020-11-01 04:35:42 【问题描述】:我目前正在制作太阳系模型。我有一个围绕太阳运行的行星。这就是地球:
glPushMatrix();
glColor3f(1.0, 0.0, 0.0);
glRotatef(theta * 10, 0.0, 1.0, 0.0);
glTranslatef(P1[0], P1[1], P1[2]);
gluSphere(quad, 0.05, 100, 20);
glPopMatrix();
现在,我想在行星移动的确切位置围绕太阳画一个试验。我该怎么做呢?我应该使用 GL_LINES 来绘制它。到目前为止,我已经得到了这个,但我没有得到想要的结果。圆形路径与行星的自转轨道并不完全相同。
glBegin(GL_LINES);
for (float i = 0; i < 2 * PI; i += 0.01)
float x = P1[0] * cos(i) + 0.0;
float y = 0.0;
float z = P1[2] * sin(i) + 0.0;
glVertex3f(x, y, z);
glEnd();
鉴于有关行星的信息,我如何绘制它的轨道试验?
【问题讨论】:
【参考方案1】:如果行星沿着圆形轨道运行,您需要知道圆心、半径和自转轴。在您的情况下,旋转轴是 y 轴。因此,轨道上的点可以通过三角函数sin
和cos
计算,定义一个中心点(float CPT[3]
)和一个半径(float radius
)。使用Line primitive 类型GL_LINE_LOOP
绘制圆形轨道:
glBegin(GL_LINES);
for (float angle = 0; i < 2 * PI; angle += 0.01)
float x = CPT[0] + cos(angle) * radius;
float y = CPT[1];
float z = CPT[2] + sin(angle) * radius;
glVertex3f(x, y, z);
glEnd();
【讨论】:
所以我的太阳在中心 (0.0,0.0,0.0)。那不就是中心点吗?如果是这样,这与我在帖子中发布的有什么不同? @SuryaKashyap 请阅读答案。例如:P1[0] * cos(i)
-> cos(angle) * radius
啊,我明白了。抱歉,我现在明白了以上是关于在OpenGL中为行星绘制轨道试验[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
九大行星绕日运行的周期? 九大行星绕日运行的周期,公转自转各是多久?
R语言使用geomtextpath包的geom_textpath函数可视化行星轨道图并沿着轨道趋势添加文本标签(Planetary orbits)