在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 轴。因此,轨道上的点可以通过三角函数sincos 计算,定义一个中心点(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中为行星绘制轨道试验[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

用opengl随机移动小行星

如何在OpenGL中的顶点之间绘制边缘? [关闭]

绕开物理规律的机器学习,从数据到数据就能预测行星轨道!

此顶点着色器中的统一浮动不起作用

九大行星绕日运行的周期? 九大行星绕日运行的周期,公转自转各是多久?

R语言使用geomtextpath包的geom_textpath函数可视化行星轨道图并沿着轨道趋势添加文本标签(Planetary orbits)