In this algorithm one rectangle has been transformed 30-degree angle and it also
move from the current object by x 100 and y 100. Here the white rectangle is input
and red one is output.
INPUT:
OUTPUT:
#include <windows.h> #include <GL/glut.h> #include <stdlib.h> #include <iostream> #include <string> #include <string> #include <ctype.h> #include <math.h> #include <stdio.h> #include <map> #include <vector> using namespace std; int trans_x,trans_y; #define pi 2.0*acos(0) long x_min,x_max,y_min,y_max; vector <int>x_cor; vector <int>y_cor; long draw_line(long x_start , long y_start , long x_end, long y_end) { glBegin(GL_LINES); glVertex2f(x_start,y_start); //start points glVertex2f(x_end,y_end); // end points glEnd(); return 0; } // draw point or pixel by sending cordinate long draw_point(long X , long Y) { glBegin(GL_POINTS); glVertex2f(X,Y); glEnd(); return 0; } int translate(int org_x, int org_y) { int i ,j; for(i =0;i<x_cor.size(); ++i) { x_cor[i] -= org_x; y_cor[i] -= org_y; } for(i=0;i<x_cor.size();++i) { //draw_point(x_cor[i],y_cor[i]); } return 0; } int scale(int s_x,int s_y) { int i ,j; for(i=0;i<x_cor.size();++i) { x_cor[i] *= s_x; y_cor[i] *= s_y; } return 0; } int anti_translate(int org_x , int org_y) { glColor3d(1,0,0); int i,j; for(i=0;i<x_cor.size();++i) { x_cor[i] += org_x; y_cor[i] += org_y; } for(i=1;i<x_cor.size();++i) { draw_line(x_cor[i-1],y_cor[i-1],x_cor[i],y_cor[i]); } draw_line(x_cor[0],y_cor[0],x_cor[x_cor.size()-1],y_cor[x_cor.size()-1]); return 0; } int rotate(int angle) { glColor3d(0,1,0); int i , j; for(i=0;i<x_cor.size();++i) { double angle_rad = pi / 180.0; x_cor[i] = x_cor[i] * cos(angle_rad * angle) - y_cor[i]*sin(angle_rad * angle); y_cor[i] = x_cor[i] * sin(angle_rad * angle) + y_cor[i]*cos(angle_rad * angle); // draw_point(x_cor[i] ,y_cor[i]); } return 0; } static void display(void) { int i; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3d(1,1,1); // set pixel color; for(i=1;i<x_cor.size();i++){ draw_line(x_cor[i-1],y_cor[i-1],x_cor[i],y_cor[i]); } draw_line(x_cor[0],y_cor[0],x_cor[x_cor.size()-1],y_cor[x_cor.size()-1]); // for scale the object by any cordinate // /* translate(trans_x,trans_y); int s_x = 2 ,s_y = 2; scale(s_x,s_y); anti_translate(trans_x,trans_y); */ // for rotate the object by any cordinate // translate(trans_x,trans_y); int angle = 30; rotate(angle); anti_translate(trans_x,trans_y); //rotate_point(30,1,2); glutSwapBuffers(); } /* 4 300 300 350 300 350 350 300 350 3 100 100 150 100 125 150 */ /* Program entry point */ int main(int argc, char *argv[]) { int i,x,y,n; glutInit(&argc, argv); glutInitWindowSize(640,480); glutInitWindowPosition(10,10); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); cin>>n; for(i=0;i<n;i++){ cin>>x>>y; x_cor.push_back(x); y_cor.push_back(y); } cin>>trans_x>>trans_y; glutCreateWindow("TRANSFORMATION"); glOrtho(0,640,0,480,0,1); glutDisplayFunc(display); glutMainLoop(); return EXIT_SUCCESS; }
No comments:
Post a Comment