月球轨道相对于太阳

Posted

技术标签:

【中文标题】月球轨道相对于太阳【英文标题】:Moon orbit in relation to sun 【发布时间】:2013-05-16 17:51:32 【问题描述】:

我可以让地球围绕太阳和它自己的轴旋转,但我不能让月球围绕地球旋转。 (我只希望它围绕它循环,我不需要计算重力或类似的东西。)

这是我的代码:

double earth_x = 50.0 * cos(orbit / 180.0 * Math::Constants<double>::pi);
double earth_y = 45.0 * sin(orbit / 180.0 * Math::Constants<double>::pi);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
//sun
glMaterialAmbientAndDiffuse(GLMaterialEnums::FRONT,GLColor<GLfloat,4>(1.5f,1.0f,0.0f));
glTranslate(0.0f, 0.0f, 0.0f);
glRotate(0.0, 0.0, 0.0, 00.0);
drawEllipsoid(10.0, 1.0, 4, 4);



//Earth
glPushMatrix();
glTranslate(earth_x, earth_y, 0.0);
glMaterialAmbientAndDiffuse(GLMaterialEnums::FRONT,GLColor<GLfloat,4>(0.2f,50.0f,50.5f));
glRotatef(110,0.0,23.0,110.0f); 

glRotatef(orbit2, 0.0f, 0.0f,1.0f);
drawPlanetGrid(5, 1, 20, 20, 1.5);

glPopMatrix();

glMaterialAmbientAndDiffuse(GLMaterialEnums::FRONT,GLColor<GLfloat,4>(50.2f,50.0f,50.5f));
//Moon
glTranslate(earth_x+10, earth_y+10, 0.0);
glRotate(moonOrb, 0.0, 0.0, 1.0);

drawEllipsoid(1, 1, 9, 9);  

moonOrb += .5;
if (moonOrb > 360)
moonOrb = 0.0;
orbit += .9;
if (orbit > 360)    

    orbit = 0;

orbit2 += 6.5;
if (orbit2 > 360)

 orbit2 = 0;

知道我的代码有什么问题吗? 到目前为止,我的对象上没有纹理,所以这就是代码中缺少它的原因。在对大小、轨道形状等进行任何更改之前,我真的只是想了解太阳系是如何工作的。

【问题讨论】:

轨道,你只是指圆,不计算重力和力等。 是的,没错。我只是想让它在我的“地球”球体周围循环。 【参考方案1】:

假设您按照我在https://***.com/a/16594168/252687 中的建议进行了操作,您所要做的就是再次为月球复制代码。由于天体不受严格限制,因此独立计算它们的轨道而不是嵌套它们的参考系更为明智。

地球的位置是:

earth_x = 30.0 * cos(earth_orbit / 180.0 * PI)
earth_y = 30.0 * sin(earth_orbit / 180.0 * PI)

月亮的位置是:

moon_x = earth_x + 15.0 * cos(moon_orbit / 180.0 * PI)
moon_y = earth_y + 15.0 * sin(moon_orbit / 180.0 * PI)

代码应该是这样的:

drawTheSun();

glPushMatrix();  // enter the Earth's frame of reference
glTranslate(earth_x, earth_y, 0.0);  // move to the position of the Earth
glRotate(110, 0.0, 23.0, 110.0f);  // earth-local transformations
drawTheEarth();
glPopMatrix();  // exit the Earth's frame of reference

glPushMatrix();  // enter the Moon's frame of reference
glTranslate(moon_x, moon_y, 0.0);  // move to the position of the Moon
glRotate(110, 0.0, 23.0, 110.0f);  // moon-local transformations
drawTheMoon();
glPopMatrix();  // exit the Moon's frame of reference

【讨论】:

当我这样做时,它开始绕地球移动,但不是绕地球旋转,它更像是一个之字形。任何想法为什么会发生?谢谢 我不确定你所说的之字形是什么意思。确保您的 moon_orbit 增量不会太大,并且行星转换不会相互影响。 我真是个菜鸟!!我的罪和 cos 倒置了……我明白了……谢谢伙计 恭喜!我很乐意提供帮助。 太有帮助了。谢谢埃塞尔!【参考方案2】:

试一试:

#include <GL/glut.h>

void display()

    static int lastMs = glutGet( GLUT_ELAPSED_TIME );
    int curMs = glutGet( GLUT_ELAPSED_TIME );
    double dt = ( curMs - lastMs ) / 1000.0;
    lastMs = curMs;

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    double w = glutGet( GLUT_WINDOW_WIDTH );
    double h = glutGet( GLUT_WINDOW_HEIGHT );
    double ar = w / h;
    gluPerspective( 60, w / h, 0.1, 100 );

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    glTranslatef( 0, 0, -20 );

    static float earth = 0;
    static float moon = 0;

    earth += 2 * dt;
    moon += 36 * dt;

    glPushMatrix();
    
        glColor3ub( 255, 255, 0 );
        glutSolidSphere( 4, 8, 8 );

        glPushMatrix();
        
            glRotatef( earth, 0, 0, 1 );
            glTranslatef( 10, 0, 0 );

            glColor3ub( 0, 255, 255 );
            glutSolidSphere( 1.5, 8, 8 );

            glPushMatrix();
            
                glRotatef( moon, 0, 0, 1 );
                glTranslatef( 2, 0, 0 );

                glColor3ub( 128, 128, 128 );
                glutSolidSphere( 0.5, 8, 8 );
            
            glPopMatrix();
        
        glPopMatrix();
       
    glPopMatrix();

    glutSwapBuffers();


void timer(int extra)

    glutPostRedisplay();
    glutTimerFunc(16, timer, 0);


int main( int argc, char **argv )

    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE );
    glutInitWindowSize( 640, 480 );
    glutCreateWindow( "GLUT" );
    glutDisplayFunc( display );
    glutTimerFunc(0, timer, 0);
    glutMainLoop();
    return 0;

【讨论】:

以上是关于月球轨道相对于太阳的主要内容,如果未能解决你的问题,请参考以下文章

暑假来了,画一个日月地球的轨道模型给孩子们,秒懂四季更迭日蚀月蚀

WPF太阳地球月球运动轨迹模拟

WPF太阳地球月球运动轨迹模拟

谁能把太阳系中各大行星的公转周期、自转周期、最高及最低气温一一列举出来?拜托了!

用月壤实现太阳能发电,人类离「定居月球」又近一步 | 来自贝索斯蓝色起源...

蓝桥杯选拔赛真题35Scratch地球绕着太阳转 少儿编程scratch蓝桥杯省赛真题讲解