Path: blob/main/8. 2D Transformation.cpp
724 views
/*Write C++/Java program to draw 2-D object and perform following basic transformations,1a) Scaling2b) Translation3c) Rotation4Use operator overloading. */56#include<iostream>7#include<stdlib.h>8#include<graphics.h>9#include<math.h>1011using namespace std;1213class POLYGON14{15private:16int p[10][10],Trans_result[10][10],Trans_matrix[10][10];17float Rotation_result[10][10],Rotation_matrix[10][10];18float Scaling_result[10][10],Scaling_matrix[10][10];19float Shearing_result[10][10],Shearing_matrix[10][10];20int Reflection_result[10][10],Reflection_matrix[10][10];2122public:23int accept_poly(int [][10]);24void draw_poly(int [][10],int);25void draw_polyfloat(float [][10],int);26void matmult(int [][10],int [][10],int,int,int,int [][10]);27void matmultfloat(float [][10],int [][10],int,int,int,float [][10]);28void shearing(int [][10],int);29void scaling(int [][10],int);30void rotation(int [][10],int);31void translation(int [][10],int);32void reflection(int [][10],int);33};3435int POLYGON :: accept_poly(int p[][10])36{37int i,n;38cout<<"\n\nEnter number of vertices : ";39cin>>n;40for(i=0;i<n;i++)41{42cout<<"\n\nEnter (x,y) Co-ordinate of point P"<<i<<" : ";43cin >> p[i][0] >> p[i][1];44p[i][2] = 1;45}4647for(i=0;i<n;i++)48{49cout<<"\n";50for(int j=0;j<3;j++)51{52cout<<p[i][j]<<"\t\t";53}54}5556return n;57}58void POLYGON :: draw_poly(int p[][10], int n)59{60int i,gd = DETECT,gm;61initgraph(&gd,&gm,NULL);62line(320,0,320,480);63line(0,240,640,240);6465for(i=0;i<n;i++)66{67if(i<n-1)68{69line(p[i][0]+320, -p[i][1]+240, p[i+1][0]+320, -p[i+1][1]+240);7071}72else73line(p[i][0]+320, -p[i][1]+240, p[0][0]+320, -p[0][1]+240);74}75767778}7980void POLYGON :: draw_polyfloat(float p[][10], int n)81{82int i,gd = DETECT,gm;83initgraph(&gd,&gm,NULL);84line(320,0,320,480);85line(0,240,640,240);8687for(i=0;i<n;i++)88{89if(i<n-1)90{91line(p[i][0]+320, -p[i][1]+240, p[i+1][0]+320, -p[i+1][1]+240);9293}94else95line(p[i][0]+320, -p[i][1]+240, p[0][0]+320, -p[0][1]+240);96}979899}100101102void POLYGON :: translation(int p[10][10],int n)103{104int tx,ty,i,j; int i1,j1,k1,r1,c1,c2;105r1=n;c1=c2=3;106cout << "\n\nEnter X-Translation tx : ";107cin >> tx;108cout << "\n\nEnter Y-Translation ty : ";109cin >> ty;110for(i=0;i<3;i++)111for(j=0;j<3;j++)112Trans_matrix[i][j] = 0;113Trans_matrix[0][0] = Trans_matrix[1][1] = Trans_matrix[2][2] = 1;114Trans_matrix[2][0] = tx;115Trans_matrix[2][1] = ty;116117for(i1=0;i1<10;i1++)118for(j1=0;j1<10;j1++)119Trans_result[i1][j1] = 0;120for(i1=0;i1<r1;i1++)121for(j1=0;j1<c2;j1++)122for(k1=0;k1<c1;k1++)123Trans_result[i1][j1] = Trans_result[i1][j1]+(p[i1][k1] * Trans_matrix[k1][j1]);124cout << "\n\nPolygon after Translation : ";125draw_poly(Trans_result,n);126}127128void POLYGON :: rotation(int p[][10],int n)129{130float type,Ang,Sinang,Cosang;131int i,j; int i1,j1,k1,r1,c1,c2;132r1=n;c1=c2=3;133cout << "\n\nEnter the angle of rotation in degrees : ";134cin >> Ang;135cout << "\n\n* * * * Rotation Types * * * *";136cout << "\n\n1.Clockwise Rotation \n\n2.Anti-Clockwise Rotation ";137cout << "\n\nEnter your choice(1-2): ";138cin >> type;139Ang = (Ang * 6.2832)/360;140Sinang = sin(Ang);141Cosang = cos(Ang);142cout<<"Mark1";143for(i=0;i<3;i++)144for(j=0;j<3;j++)145Rotation_matrix[i][j] = 0;146cout<<"Mark2";147Rotation_matrix[0][0] = Rotation_matrix[1][1] = Cosang;148Rotation_matrix[0][1] = Rotation_matrix[1][0] = Sinang;149Rotation_matrix[2][2] = 1;150if(type == 1)151Rotation_matrix[0][1] = -Sinang;152else153Rotation_matrix[1][0] = -Sinang;154155for(i1=0;i1<10;i1++)156for(j1=0;j1<10;j1++)157Rotation_result[i1][j1] = 0;158for(i1=0;i1<r1;i1++)159for(j1=0;j1<c2;j1++)160for(k1=0;k1<c1;k1++)161Rotation_result[i1][j1] = Rotation_result[i1][j1]+(p[i1][k1] * Rotation_matrix[k1][j1]);162163cout << "\n\nPolygon after Rotation : ";164for(i=0;i<n;i++)165{166cout<<"\n";167for(int j=0;j<3;j++)168{169cout<<Rotation_result[i][j]<<"\t\t";170}171}172draw_polyfloat(Rotation_result,n);173}174175void POLYGON :: scaling(int p[][10],int n)176{177float Sx,Sy;178int i,j; int i1,j1,k1,r1,c1,c2;179r1=n;c1=c2=3;180cout<<"\n\nEnter X-Scaling Sx : ";181cin>>Sx;182cout<<"\n\nEnter Y-Scaling Sy : ";183cin>>Sy;184185for(i=0;i<3;i++)186{187for(j=0;j<3;j++)188{189Scaling_matrix[i][j] = 0;190}191}192193Scaling_matrix[0][0] = Sx;194Scaling_matrix[0][1] = 0;195Scaling_matrix[0][2] = 0;196Scaling_matrix[1][0] = 0;197Scaling_matrix[1][1] = Sy;198Scaling_matrix[1][2] = 0;199Scaling_matrix[2][0] = 0;200Scaling_matrix[2][1] = 0;201Scaling_matrix[2][2] = 1;202203for(i1=0;i1<10;i1++)204for(j1=0;j1<10;j1++)205Scaling_result[i1][j1] = 0;206for(i1=0;i1<r1;i1++)207for(j1=0;j1<c2;j1++)208for(k1=0;k1<c1;k1++)209Scaling_result[i1][j1] = Scaling_result[i1][j1]+(p[i1][k1] * Scaling_matrix[k1][j1]);210211cout<<"\n\nPolygon after Scaling : ";212draw_polyfloat(Scaling_result,n);213}214215void POLYGON :: shearing(int p[][10],int n)216{217float Sx,Sy,type; int i,j;218int i1,j1,k1,r1,c1,c2;219r1=n;c1=c2=3;220for(i=0;i<3;i++)221for(j=0;j<3;j++)222{223if(i == j)224Shearing_matrix[i][j] = 1;225else226Shearing_matrix[i][j] = 0;227}228cout << "\n\n* * * * Shearing Types * * * *";229cout << "\n\n1.X-Direction Shear \n\n2.Y-Direction Shear ";230cout << "\n\nEnter your choice(1-2) : ";231cin >> type;232if(type == 1)233{234cout << "\n\nEnter X-Shear Sx : ";235cin >> Sx;236Shearing_matrix[1][0] = Sx;237}238else239{240cout << "\n\nEnter Y-Shear Sy : ";241cin >> Sy;242Shearing_matrix[0][1] = Sy;243}244245246for(i1=0;i1<10;i1++)247for(j1=0;j1<10;j1++)248Shearing_result[i1][j1] = 0;249for(i1=0;i1<r1;i1++)250for(j1=0;j1<c2;j1++)251for(k1=0;k1<c1;k1++)252Shearing_result[i1][j1] = Shearing_result[i1][j1]+(p[i1][k1] * Shearing_matrix[k1][j1]);253254cout << "\n\nPolygon after Shearing : ";255draw_polyfloat(Shearing_result,n);256}257258void POLYGON :: reflection(int p[][10],int n)259{260int type,i,j;261262int i1,j1,k1,r1,c1,c2;263r1=n;c1=c2=3;264cout << "\n\n* * * * Reflection Types * * * *";265cout << "\n\n1.About X-Axis \n\n2.About Y-Axis \n\n3.About Origin\n\n4.About Line y = x \n\n5.About Line y = -x \n\nEnter your choice(1-5) : ";266cin >> type;267for(i=0;i<3;i++)268for(j=0;j<3;j++)269{270Reflection_matrix[i][j] = 0;271}272switch(type)273{274case 1:275Reflection_matrix[0][0] = 1;276Reflection_matrix[1][1] = -1;277Reflection_matrix[2][2] = 1;278break;279case 2:280Reflection_matrix[0][0] = -1;281Reflection_matrix[1][1] = 1;282Reflection_matrix[2][2] = 1;283break;284case 3:285Reflection_matrix[0][0] = -1;286Reflection_matrix[1][1] = -1;287Reflection_matrix[2][2] = 1;288break;289case 4:290Reflection_matrix[0][1] = 1;291Reflection_matrix[1][0] = 1;292Reflection_matrix[2][2] = 1;293break;294case 5:295Reflection_matrix[0][1] = -1;296Reflection_matrix[1][0] = -1;297Reflection_matrix[2][2] = 1;298break;299}300301for(i1=0;i1<10;i1++)302for(j1=0;j1<10;j1++)303Reflection_result[i1][j1] = 0;304for(i1=0;i1<r1;i1++)305for(j1=0;j1<c2;j1++)306for(k1=0;k1<c1;k1++)307Reflection_result[i1][j1] = Reflection_result[i1][j1]+(p[i1][k1] * Reflection_matrix[k1][j1]);308309cout << "\n\n\t\tPolygon after Reflection : ";310//cout << "\n\n\t\tPolygon after Rotation…";311for(i=0;i<n;i++)312{313cout<<"\n";314for(int j=0;j<3;j++)315{316cout<<Reflection_result[i][j]<<"\t\t";317}318}319draw_poly(Reflection_result,n);320//closegraph();321}322323324325int main()326{327int ch,n,p[10][10];328POLYGON p1;329cout<<"\n\n* * * * 2-D TRANSFORMATION * * * *";330n= p1.accept_poly(p);331332cout <<"\n\nOriginal Polygon : ";333p1.draw_poly(p,n);334do335{336337int ch;338cout<<"\n\n* * * * 2-D TRANSFORMATION * * * *";339cout<<"\n\n1.Translation \n\n2.Scaling \n\n3.Rotation \340\n\n4.Reflection \n\n5.Shearing \n\n6.Exit";341cout<<"\n\nEnter your choice(1-6) : ";342cin>>ch;343344switch(ch)345{346case 1:347348p1.translation(p,n);349break;350351case 2:352353p1.scaling(p,n);354break;355356case 3:357358p1.rotation(p,n);359break;360361case 4:362363p1.reflection(p,n);364break;365366case 5:367368p1.shearing(p,n);369break;370371case 6:372exit(0);373}374}while(1);375return 0;376}377378379