OpenGLで太陽系の惑星軌道を描くプログラムを作成中です。
太陽を中心に公転する2つの惑星を描くことができました。
惑星はそれぞれ公転周期が異なるものですが、
これらの2つの惑星の公転の速度を変えるにはどうすればよいのでしょうか?
/* p4-MovingPlanet.c * Animation for a solar system ( see p3-planet.c ) using by glutTimerFunc(). */ #include <stdlib.h> #include <GL/glut.h> #include <math.h> int year = 0, day = 0; int samplingTime = 50; void myKeyboard(unsigned char key, int x, int y) { if ( key == 27) exit (0); } void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3d(1.0, 1.0, 1.0); glPushMatrix(); glutSolidSphere(1.0, 20, 16); // sun glRotated((double)year, 0.0, 1.0, 0.0); glTranslated(3.0, 0.0, 0.0); glRotated((double)day, 0.0, 1.0, 0.0); glutSolidSphere(0.2, 10, 8); // planet glPopMatrix(); glPushMatrix(); glRotated((double)year, 0.0, 1.0, 0.0); glTranslated(2.0, 0.0, 0.0); glRotated((double)day, 0.0, 1.0, 0.0); glutSolidSphere(0.1, 10, 8); glPopMatrix(); glutSwapBuffers(); } void myInit(char *progname) { int width = 500, height = 500; glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(width, height); glutInitWindowPosition(0, 0); glutCreateWindow(progname); glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(90.0, (double)width / (double)height, 0.1, 20.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 1.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } void myTimer(int value) { if (value==1) { glutTimerFunc(samplingTime,myTimer,1); year = (year+1) % 360; day = (day+5) % 360; glutPostRedisplay(); } } int main(int argc, char** argv) { glutInit(&argc, argv); myInit(argv[0]); glutKeyboardFunc(myKeyboard); glutTimerFunc(samplingTime, myTimer, 1); glutDisplayFunc(myDisplay); glutMainLoop(); return 0; }
> 質問に追記(既存文面やコードを変更するのではなく,文字通りに記述を追加する)する形
と言うのは,
「元々の文面を1文字も修正や削除することなく完全にそのまま保持した状態で,その後ろ側に新たな記述を加える」という意味です.
質問文と回答やコメントの内容がミスマッチになってしまうと,
これでは読み手には「何についての回答やコメントが行われているのか」が全く把握できなくなります.
(元の文面が残っていないので,話の経過を追えない.)
例えば,「何かしらに困って検索した結果このページが検索にひっかかって見に来た人」には全く役に立たない(=ログとして機能しない)謎の文字列と化してしまうわけです.
少なくとも,
当初の問題点が解消したならば「解決」として質問を閉じ,
新たな問題点に関しては,別質問として切り分けるべきと思います.