я работаю над программой, в которой я хочу вращать объект по круговому пути.
посмотрите на мой код для реализации функциональности
#include<stdio.h>
#include<math.h>
#include<GL/glut.h>
#define pi 3.142
static GLfloat angle=0;
void init()
{
gluOrtho2D(-780, 780, -780, 780);
}
void circle(float rad)
{
glBegin(GL_POINTS);
glColor3f(1,0,0);
for ( float i = 0; i < (2 * pi); i += 0.00001)
{
glVertex2i(rad * cos(i), rad * sin(i));
}
glEnd();
}
void ele(float rad)
{
glBegin(GL_POINTS);
glColor3f(1,1,1);
for ( float i = 0; i < (2 * pi); i += 0.00001)
{
glVertex2i(rad+10* cos(i),10* sin(i));
glVertex2i(-(rad +10* cos(i)),10* sin(i));
}
glEnd();
}
void nuc(float rad)
{
glBegin(GL_POLYGON);
glColor3f(1,1,0);
for (float i=0;i<(2 * pi);i=i+0.00001)
{
glVertex2f(rad*cos(i),rad*sin(i));
}
glEnd();
}
void display()
{
glPushMatrix();
glRotatef(angle,0,0,1);
nuc(200);
ele(400);
circle(400);
ele(600);
circle(600);
glPopMatrix();
glutSwapBuffers();
}
void rotate(){
angle=angle+0.2;
if(angle>360)
{
angle=angle-360;
}
glutPostRedisplay();
}
void mouseControl(int button, int state, int x, int y)
{
switch (button)
{
case GLUT_LEFT_BUTTON:
if ( state == GLUT_DOWN)
glutIdleFunc(rotate);
break;
case GLUT_MIDDLE_BUTTON:
case GLUT_RIGHT_BUTTON:
if(state==GLUT_DOWN)
glutIdleFunc(NULL);
break;
default:
break;
}
}
void keyboard(unsigned char key, int x, int y)
{
if (key== 32){
glutIdleFunc(rotate);
}
if(key==17){
glutIdleFunc(NULL);
}
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitWindowPosition(100, 100);
glutInitWindowSize(500, 500);
glutCreateWindow("ATOM SIMULATION");
init();
glutDisplayFunc(display);
glutMouseFunc(mouseControl);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
каким-то образом я реализовал это так, но вращающийся объект будет находиться как в предыдущем, так и в текущем положении. Кто-нибудь может мне сказать, что я хочу, чтобы только два объекта вращались по орбите, но это происходит в моей реализации, пожалуйста, помогите мне посмотрите на вывод здесь