Program:
#include<GL/glut.h>
#include<math.h>
double parr[8];
void init()
{
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0,0,0,1);
glColor3f(1,0,1);
gluOrtho2D(-500,500,-500,500); // Left,right,bottom,top
// Polygon Defaut
parr[0] = 10; //x
parr[1] = 10; //y
parr[2] = 200;
parr[3] = 10;
parr[4] = 200;
parr[5] = 200;
parr[6] = 10;
parr[7] = 200;
}
double degreeToRad(double deg)
{
return 3.14*(deg/180);
}
void polygon()
{
glColor3f(1,0,0);
glBegin(GL_LINE_LOOP);
glVertex2f(parr[0],parr[1]);
glVertex2f(parr[2],parr[3]);
glVertex2f(parr[4],parr[5]);
glVertex2f(parr[6],parr[7]);
glEnd();
glFlush();
}
void drawCorodinates()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,1,1);
glPointSize(4);
glBegin(GL_LINES);
glVertex2f(-500,0);
glVertex2f(500,0);
glVertex2f(0,500);
glVertex2f(0,-500);
glEnd();
glColor3f(1,0,0);
glBegin(GL_POINTS);
glVertex2f(0,0);
glEnd();
glFlush();
}
// Translation
void translate2d()
{
// 40px in x
// 50px in y
int i = 0;
int x = 40, y = 50;
for(i= 0;i<7;i=i+2)
{
parr[i] = parr[i] + x;
}
for(i = 1;i<7;i=i+2)
{
parr[i] = parr[i] + y;
}
polygon();
}
// Rotation
void rotation()
{
double angle = 180,rad,x,y;
rad = degreeToRad(angle);
for(int i=0;i<8;i=i+2)
{
x = parr[i]*cos(rad) - parr[i+1]*sin(rad);
y = parr[i]*sin(rad) + parr[i+1]*cos(rad);
parr[i] = x;
parr[i+1] = y;
}
polygon();
}
// Scaling
void scaling2d()
{
// 2 unit in x
// 2 unit in y
int i = 0;
double x = 0.5, y = 0.5;
for(i= 0;i<7;i=i+2)
{
parr[i] = parr[i] * x;
parr[i+1] = parr[i+1] * y;
}
polygon();
}
void menu(int ch)
{
drawCorodinates();
switch(ch)
{
case 1: polygon();
break;
case 2: translate2d();
break;
case 3: scaling2d();
break;
case 4: rotation();
break;
}
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("2D Transformation");
init();
glutDisplayFunc(drawCorodinates);
glutCreateMenu(menu);
glutAddMenuEntry("1 Display Polygon",1);
glutAddMenuEntry("2 Translate",2);
glutAddMenuEntry("3 Scaling",3);
glutAddMenuEntry("4 Rotation",4);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop();
return 0;
}
Output:
1) Display Menu
3) Translate Polygon
4) Rotation Anti Clockwise 180 degree



