ここから本文です

#include <stdlib.h> #include <GL/glut.h> #include <math.h> int year = 0, d...

ck_********さん

2011/11/1923:51:05

#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);

void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3d(1.0, 0.0, 0.0);//真ん中の色
glPushMatrix();
glutWireSphere(1.0, 20, 16);

glColor3d(1.0, 0.0, 1.0);
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);
glutWireSphere(0.2, 10, 8);
glPopMatrix();

glColor3d(0.0, 1.0, 1.0);
glPushMatrix();
glRotated((double)year*0.241, 0.0, 1.0, 0.0);
glTranslated(0.387, 0.0, 0.0);
glRotated((double)day*58.809, 0.0, 1.0, 0.0);
glutWireSphere(0.5, 10, 8);

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, 5.0, 7.5, 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;
}

教えていただいたプログラムに水星と金星を付け加えてみたんですが
うまくいきません。
何がいけないんでしょうか。
教えてください。よろしくお願いいたします。

補足大変申し訳ないんですが、距離はどうやって求めれば
よろしいんでしょうか。
頭が悪いのでわかりません。
大変申し訳ありません。

閲覧数:
400
回答数:
1
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

buy********さん

編集あり2011/11/2001:16:27

>ck_a_yanakaさん



--- gl273.c
#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);

void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3d(1.0, 0.0, 0.0);//真ん中の色
glPushMatrix();
glutWireSphere(1.0, 20, 16);
glPopMatrix(); /*** 追加 */

glColor3d(1.0, 0.0, 1.0); /*** 金星 */
glPushMatrix(); /*** 追加 */
glRotated((double)day/225.0*360 , 0.0, 1.0, 0.0); /*公転周期 year*.241 -> day/225.0*360*/
glTranslated(7.0, 0.0, 0.0); /* 3->7 */
glRotated((double)day/243.0*360, 0.0, 1.0, 0.0); /* day*58.809 -> day/243.0*360*/
glutWireSphere(0.6, 10, 8);
glPopMatrix();

glColor3d(0.0, 1.0, 1.0); /*** 水星 */
glPushMatrix();
glRotated((double)day/88.0*360 , 0.0, 1.0, 0.0); /* year -> day/88.0*360*/
glTranslated(4, 0.0, 0.0); /* 0.387 -> 4 */
glRotated((double)day/88.0*360, 0.0, 1.0, 0.0); /* day -> day/88.0*360 */
glutWireSphere(0.2, 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, 5.0, 7.5, 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+1) ; /*** % 360 削除 , +5 -> +1 */
glutPostRedisplay();
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
myInit(argv[0]);
glutKeyboardFunc(myKeyboard);
glutTimerFunc(samplingTime, myTimer, 1);
glutDisplayFunc(myDisplay);
glutMainLoop();
return 0;
}

---

*** 補足について
字数制限ぎりぎりなので前の文書消しました。
距離は(公転半径は)

glTranslated(7.0, 0.0, 0.0); /* 3->7 */

で決ってます。

よろしくお願い致します。

質問した人からのコメント

2011/11/20 01:28:05

降参 ありがとうございました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる