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] = 150;
parr[5] = 150;
}
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]);
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();
}
// Reflection About Origin
void reflection_origin()
{
for(int i=0;i<6;i++)
{
parr[i] = -parr[i];
}
polygon();
}
// Reflection About X-axis
void reflection_x()
{
for(int i=1;i<6;i=i+2)
{
parr[i] = -parr[i];
}
polygon();
}
// Reflection About Y-axis
void reflection_y()
{
for(int i=0;i<6;i=i+2)
{
parr[i] = -parr[i];
}
polygon();
}
// Reflection About X=Y
void reflection_xy()
{
double temp;
for(int i=0;i<6;i=i+2)
{
temp = parr[i];
parr[i] = parr[i+1];
parr[i+1] = temp;
}
polygon();
}
// Shearing About X-Axis
void shearing_x()
{
int shx = 2;
for(int i=0;i<6;i=i+2)
{
parr[i] = parr[i] + shx*parr[i+1];
}
polygon();
}
// Shearing About Y-Axis
void shearing_y()
{
int shy = 2;
for(int i=1;i<6;i=i+2)
{
parr[i] = parr[i] + shy*parr[i-1];
}
polygon();
}
// Shearing About X Y-Axis
void shearing_xy()
{
int shx = 2,shy = 2,temp;
for(int i=0;i<6;i=i+2)
{
temp = parr[i] + shx * parr[i+1];
parr[i+1] = parr[i]*shy + parr[i+1];
parr[i] = temp;
}
polygon();
}
void menu(int ch)
{
drawCorodinates();
switch(ch)
{
case 1: polygon();
break;
case 2: reflection_origin();
break;
case 3: reflection_x();
break;
case 4: reflection_y();
break;
case 5: reflection_xy();
break;
case 6: shearing_x();
break;
case 7: shearing_y();
break;
case 8: shearing_xy();
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 Reflection About Origin",2);
glutAddMenuEntry("3 Reflection About X-Axis",3);
glutAddMenuEntry("4 Reflection About Y-Axiis",4);
glutAddMenuEntry("5 Reflection About X=Y",5);
glutAddMenuEntry("6 Shearing About X-Axis",6);
glutAddMenuEntry("7 Shearing About Y-Axiis",7);
glutAddMenuEntry("8 Shearing About XandY",8);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop();
return 0;
}
Output:








