Sunday, June 8, 2014

Rotate a square with respect to the origin



#include <windows.h>
#include <gl/Gl.h>
#include <gl/glut.h>
#include <cmath>

int screenheight = 600;
int screenwidth = 800;
int flag = 0;

double angle = 30;            

typedef struct{
    float x;
    float y;
}Point2D;

Point2D p1,p2,p3,p4;

void DrawSquare(Point2D pt1, Point2D pt2,Point2D pt3, Point2D pt4){
       glPointSize(2.0);
       glBegin(GL_LINE_LOOP);
       glVertex2i(pt1.x, pt1.y);
   glVertex2i(pt3.x, pt3.y);
  glVertex2i(pt2.x, pt2.y);

  glVertex2i(pt4.x, pt4.y);
       glEnd();

       glPointSize(5.0);
       glBegin(GL_POINTS);
       glVertex2i(pt2.x, pt2.y);
       glEnd();
       glFlush();
}

Point2D translate(Point2D p, float tx, float ty){
   p.x =p.x;
   p.y = p.y;
   return p;

}
Point2D  rotate(Point2D p, float ang){

    ang = ang * 3.14 / 180.0;                            
    Point2D ptemp;

    ptemp.x = p.x * cos(ang) - p.y * sin(ang);

    ptemp.y = p.x * sin(ang) + p.y * cos(ang);
    return ptemp;

}

 void myMouse(int button, int state, int x, int y) {
glPointSize(5.0);
if(state == GLUT_DOWN)
{
if(button == GLUT_LEFT_BUTTON)
{
  if (flag==0){
p1.x = x;
p1.y = screenheight - y;
p3.y=screenheight - y;
p4.x=x;
flag = 1;
} else if(flag==1){
p2.x = x;
p2.y = screenheight - y;
p3.x=x;
p4.y=screenheight - y;
flag = 0;
DrawSquare(p1,p2,p3,p4);


}

}
else if (button == GLUT_RIGHT_BUTTON)
{
Point2D Rotated_p2 = rotate(p2,angle);
Point2D Rotated_p1 = rotate(p1,angle);
Point2D Rotated_p3 = rotate(p3,angle);
Point2D Rotated_p4 = rotate(p4,angle);
                   DrawSquare(Rotated_p1,Rotated_p2,Rotated_p3,Rotated_p4);
}
}
}

void myDisplay()

{

       glClearColor(1.0f, 1.0f, 1.0f, 0.0f);

       glClear(GL_COLOR_BUFFER_BIT);

       glColor3f(0.0f, 0.0f, 0.0f);

}





int main( int argc, char ** argv ) {

       glutInit( &argc, argv );

       glutInitWindowPosition( 0, 0 );

       glutInitWindowSize( 800, 600 );

       glutCreateWindow( "Draw Dots" );



       glMatrixMode( GL_PROJECTION );

       glLoadIdentity();

       gluOrtho2D( 0, 800, 0, 600 );

       glViewport(0, 0, 800, 600);



       glutMouseFunc( myMouse );

       glutDisplayFunc( myDisplay );

       glutMainLoop();



       return( 0 );

}