Professional Documents
Culture Documents
h>
#include <glut.h>
#include <math.h>
#include <stdlib.h>
struct colorentry
{
unsigned char red;
unsigned char green;
unsigned char blue;
colorentry(int r, int g, int b):red(r),green(g),blue(b){};
};
void Init();
void Display();
void Reshape(int Width, int Height);
void keyCB(unsigned char key, int x, int y);
void specialKey(int key, int x, int y);
void OnIdle();
void DrawLine(int x1, int y1, int x2, int y2, colorentry c);
void PutPixel(int x, int y, colorentry c);
void OnTime1(int d);
//void OnTime2(int j);
void DrawSquareRotate(int x0, int y0, int dgoc, colorentry c);
void DrawElip (int xc, int yc, int a, int b, int i);
int Xt,Yt;
int n=8;
int w=150;
void Init()
{
glClearColor(1.0,1.0,1.0,1.0);
//glClearColor(128,255,0,1.0);
Xt=0;
Yt=0;
void Display()
{
glClear(GL_COLOR_BUFFER_BIT);
int xmax = glutGet(GLUT_WINDOW_WIDTH);
int ymax = glutGet(GLUT_WINDOW_HEIGHT);
DrawSquareRotate(Xt,Yt,dgoc,colorentry(255,255,0));
glFlush();
glutSwapBuffers();
}
void OnIdle()
{
glutPostRedisplay();
}
float R = sqrt(float(w)*w+w*w);
switch(key)
{
case GLUT_KEY_LEFT:
if(Xt>(-xmax/2+R))
Xt-=1;
break;
case GLUT_KEY_RIGHT:
if(Xt<(xmax/2-R))
Xt+=1;
break;
case GLUT_KEY_UP:
if(Yt<(ymax/2-R))
Yt+=1;
break;
case GLUT_KEY_DOWN:
if(Yt>(-ymax/2+R))
Yt-=1;
break;
}
}
void DrawLine(int x1, int y1, int x2, int y2, colorentry c)
{
glBegin(GL_LINES);
glColor3ub(c.red,c.green,c.blue);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glEnd();
}
void OnTime1(int d)
{
dgoc = (dgoc + d)%360;
glutTimerFunc(100,OnTime1,5);
}
void OnTime2(int j)
{
dgoc1 = (dgoc1 + j)%180;
glutTimerFunc(100,OnTime1,10);
}
glVertex2f(xj,yj);
glVertex2f(xc,yc);
glVertex2f(xj,yj);
}
glEnd();*/
float xk,yk;
glBegin(GL_POLYGON);
glColor3f(255,255,0);
for (int k=90;k<=270;k++)
{
xk=xc+r1*cos(RAD(k-dgoc));
yk=yc+r1*sin(RAD(k-dgoc));
glVertex2f(xk,yk);
}
glEnd();
float xm,ym;
glBegin(GL_POLYGON);
glColor3f(0,0,0);
for (int m=271;m<450;m++)
{
xm=xc+r1*cos(RAD(m-dgoc));
ym=yc+r1*sin(RAD(m-dgoc));
glVertex2f(xm,ym);
}
glEnd();
//Nua vong tron vang nho
//float xn,yn;
// float _xc,_yc;
///* glBegin(GL_POLYGON);
// glColor3f(255,255,0);*/
// for (int n=271;n<272;n++)
// {
// /*xn=((xc+r1*cos(RAD(n+dgoc)))/2);
// yn=((yc-71+r1*sin(RAD(n+dgoc)))/2);*/
// _xc = xc+(r1*cos((RAD(n))))/2;
// // _yc = yc-35+r1+6*r1/11*sin(RAD(n+dgoc));
// _yc = yc-35+r1+r1/2*sin(RAD(n));
// DrawElip(_xc,_yc-r1/2,r1/2,r1/2,255);
//DrawElip(_xc,_yc-r1/2,r1/8,r1/8,0);
// /* glVertex2f(xn,yn);*/
// }
// glEnd();
//Nua vong tron den nho
// float xa,ya;
///*glBegin(GL_POLYGON);
//glColor3f(0,0,0);*/
//for (int k=90;k<91;k++)
//{
// xa=((xc+r1*cos(RAD(k+dgoc)))/2);
// ya=((yc+71+r1*sin(RAD(k+dgoc)))/2);
// /*glVertex2f(xa,ya);*/
//}
//glEnd();
float _xc,_yc;
/* glBegin(GL_POLYGON);
glColor3f(255,255,0);*/
for (int n=271;n<272;n++)
{
/*xn=((xc+r1*cos(RAD(n+dgoc)))/2);
yn=((yc-71+r1*sin(RAD(n+dgoc)))/2);*/
_xc=xc+(r1*cos((RAD(n-dgoc)))/2);
_yc=yc-36+r1+(r1/2)*sin(RAD(n-dgoc));
DrawElip(_xc,_yc-r1/2,r1/2,r1/2,255);
DrawElip(_xc,_yc-r1/2,r1/8,r1/8,0);
/* glVertex2f(xn,yn);*/
}
glEnd();
float xa,ya;
//glBegin(GL_POLYGON);
//glColor3f(0,0,0);*/
for (int j=90;j<91;j++)
{
xa=xc+(r1*cos((RAD(j-dgoc)))/2);
ya=yc-106+r1+(r1/2)*sin(RAD(j-dgoc));
DrawElip(xa,ya+r1/2,r1/2,r1/2,0);
DrawElip(xa,ya+r1/2,r1/8,r1/8,255);
/*glVertex2f(xa,ya);*/
}
glEnd();
/* float _xc,_yc;*/
for (int k =90;k<91;k++)
{
/* _xc = xc+r1*cos((RAD(k-90+dgoc/2)));
_yc = yc+r1/2+r1*sin((RAD(k-90+dgoc/2)));*/
/*_xc = xc+r1*cos(RAD(k));
_yc = yc+r1/4+r1*sin(RAD(k));*/
//DrawElip(_xc,_yc+r1/2,r1/2,r1/2,0);//tròn đen lớn
//DrawElip(_xc,_yc-r1/2,r1/2,r1/2,255);
/* DrawElip(_xc,_yc+r1/2,r1/8,r1/8,255);
DrawElip(_xc,_yc-r1/2,r1/8,r1/8,0);*/