C++ 我的太阳系出了问题

C++ 我的太阳系出了问题,c++,opengl,C++,Opengl,这就是我的问题。我应该建立一个以太阳为中心,行星围绕太阳旋转的太阳系;每个行星都应该有自己的卫星 所以,我做了这一切,但我不能做地球自转。。。地球绕着太阳转,月亮绕着地球转。。。我怎么能让地球自转呢?当我在代码中输入另一个“GLROTING”命令时,月亮掉到了地球上或者发生了一些奇怪的事情 下面是我的代码 // EARTH // INFO: 1) it's 3rd planet from the Sun; // 2) it's 5th largest planet in the So

这就是我的问题。我应该建立一个以太阳为中心,行星围绕太阳旋转的太阳系;每个行星都应该有自己的卫星

所以,我做了这一切,但我不能做地球自转。。。地球绕着太阳转,月亮绕着地球转。。。我怎么能让地球自转呢?当我在代码中输入另一个“GLROTING”命令时,月亮掉到了地球上或者发生了一些奇怪的事情

下面是我的代码

// EARTH
// INFO: 1) it's 3rd planet from the Sun;
//       2) it's 5th largest planet in the Solar System, with an equatorial radius of 6378.388km;
//       3) it's 3rd fastest planet, because its orbital period is of 365 earth-days (1 year).
void Earth(void)
{
    DrawOrbit(5.5, 1);
    glRotatef((GLfloat) year*6.2, 0.0, 1.0, 0.0); //orbital movement for the Earth around the Sun
    glTranslatef(5.5, 0.0, 0.0);
    glColor3f(0.0, 0.3, 1.0);
    glutSolidSphere(0.28, 20, 10); //draw Earth: more or less, the Earth has got the same dimension of Venus.

    // The Earth has got one natural satellites: the Moon. Let's draw it:
    glPushMatrix();
    glRotatef((GLfloat) day*2, 0.0, 1.0, 0.0); //rotate for the moon
    glTranslatef(0.5, 0.0, 0.0);
    glColor3f(1.0f, 1.0f, 1.0f);
    glutSolidSphere(0.05, 5, 4); //draw moon: its diameter is about a quarter the diameter of Earth 
    glPopMatrix();

}

月球绕地球公转与地球绕其自身轴线的自转无关(至少出于渲染目的)

所以你应该旋转地球,然后用你的月亮的逻辑。此外,如果您只是将地球绘制为实心球体,即使它围绕自身旋转,也不会在应用程序中显示,除非您有一个漂亮的纹理

glPushMatrix();
glRotatef(earth_rotation);
glutSolidSphere(0.28, 20, 10); //draw Earth: more or less, the Earth has got the same dimension of Venus.
glPopMatrix();

一些天文学注释:地球实际上略大于金星。到目前为止,所有的轨道都是共面的。此外,地球自转轴相对于轨道面(称为黄道面)倾斜约23°。月球的轨道再次相对于黄道倾斜约5°。当然,行星并不是以完美的圆周旋转的方式围绕太阳运行,而是以椭圆曲线的方式运行。

如果你想准确地做到这一点,你所做的是,坦率地说,是错误的

行星不太绕太阳运行。它们围绕太阳系重心运行,该重心位于太阳表面的正外部。月球的质量约为地球的0.0123,这意味着您最好将地球和月球建模为围绕其共同质心运行,而不是月球围绕地球运行


冥王星和卡戎也是如此,但是,嘿,冥王星不再是行星了,谁在乎呢?

我想你正在使用OpenGL?这个问题的标题很好。XD只要不使用纹理,就不会注意到地球网格的旋转。当您开始使用纹理时,只需移动一个纹理坐标,地球将开始旋转眼睛,当然。。。为了查看旋转,我用“线”球体替换“实心”…非常感谢,但是标识器“地球旋转”呢?我如何定义它?就像我对标识符“年”和“日”所做的那样?@Elaine:这是一个占位符标识符。地球自转为每23小时360°56min 4.1s(一个太阳日需要24小时,但由于轨道运动,地球在一个太阳日的自转角度必须略大于360°)。所以你必须适当地将它与模型的其他部分同步。啊哈,是的,你是对的。。。但他们让我这样做:)