2D Transformation
2D Transformation
a) Scaling
b) Translation
c) Rotation
#include<iostream>
#include<stdlib.h>
#include<graphics.h>
#include<math.h>
class POLYGON
private:
int p[10][10],Trans_result[10][10],Trans_matrix[10][10];
float Rotation_result[10][10],Rotation_matrix[10][10];
float Scaling_result[10][10],Scaling_matrix[10][10];
float Shearing_result[10][10],Shearing_matrix[10][10];
int Reflection_result[10][10],Reflection_matrix[10][10];
public:
};
int i,n;
cin>>n;
for(i=0;i<n;i++)
p[i][2] = 1;
for(i=0;i<n;i++)
cout<<"\n";
for(int j=0;j<3;j++)
cout<<p[i][j]<<"\t\t";
return n;
initgraph(&gd,&gm,NULL);
line(320,0,320,480);
line(0,240,640,240);
for(i=0;i<n;i++)
if(i<n-1)
else
}
}
initgraph(&gd,&gm,NULL);
line(320,0,320,480);
line(0,240,640,240);
for(i=0;i<n;i++)
if(i<n-1)
else
}
void POLYGON :: translation(int p[10][10],int n)
r1=n;c1=c2=3;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
Trans_matrix[i][j] = 0;
Trans_matrix[2][0] = tx;
Trans_matrix[2][1] = ty;
for(i1=0;i1<10;i1++)
for(j1=0;j1<10;j1++)
Trans_result[i1][j1] = 0;
for(i1=0;i1<r1;i1++)
for(j1=0;j1<c2;j1++)
for(k1=0;k1<c1;k1++)
float type,Ang,Sinang,Cosang;
r1=n;c1=c2=3;
Sinang = sin(Ang);
Cosang = cos(Ang);
cout<<"Mark1";
for(i=0;i<3;i++)
for(j=0;j<3;j++)
Rotation_matrix[i][j] = 0;
cout<<"Mark2";
Rotation_matrix[2][2] = 1;
if(type == 1)
Rotation_matrix[0][1] = -Sinang;
else
Rotation_matrix[1][0] = -Sinang;
for(i1=0;i1<10;i1++)
for(j1=0;j1<10;j1++)
Rotation_result[i1][j1] = 0;
for(i1=0;i1<r1;i1++)
for(j1=0;j1<c2;j1++)
for(k1=0;k1<c1;k1++)
for(i=0;i<n;i++)
cout<<"\n";
for(int j=0;j<3;j++)
cout<<Rotation_result[i][j]<<"\t\t";
draw_polyfloat(Rotation_result,n);
}
void POLYGON :: scaling(int p[][10],int n)
float Sx,Sy;
r1=n;c1=c2=3;
cin>>Sx;
cin>>Sy;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
Scaling_matrix[i][j] = 0;
Scaling_matrix[0][0] = Sx;
Scaling_matrix[0][1] = 0;
Scaling_matrix[0][2] = 0;
Scaling_matrix[1][0] = 0;
Scaling_matrix[1][1] = Sy;
Scaling_matrix[1][2] = 0;
Scaling_matrix[2][0] = 0;
Scaling_matrix[2][1] = 0;
Scaling_matrix[2][2] = 1;
for(i1=0;i1<10;i1++)
for(j1=0;j1<10;j1++)
Scaling_result[i1][j1] = 0;
for(i1=0;i1<r1;i1++)
for(j1=0;j1<c2;j1++)
for(k1=0;k1<c1;k1++)
draw_polyfloat(Scaling_result,n);
int i1,j1,k1,r1,c1,c2;
r1=n;c1=c2=3;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i == j)
Shearing_matrix[i][j] = 1;
else
Shearing_matrix[i][j] = 0;
if(type == 1)
Shearing_matrix[1][0] = Sx;
else
Shearing_matrix[0][1] = Sy;
for(i1=0;i1<10;i1++)
for(j1=0;j1<10;j1++)
Shearing_result[i1][j1] = 0;
for(i1=0;i1<r1;i1++)
for(j1=0;j1<c2;j1++)
for(k1=0;k1<c1;k1++)
draw_polyfloat(Shearing_result,n);
int type,i,j;
int i1,j1,k1,r1,c1,c2;
r1=n;c1=c2=3;
cout << "\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) : ";
for(i=0;i<3;i++)
for(j=0;j<3;j++)
Reflection_matrix[i][j] = 0;
switch(type)
case 1:
Reflection_matrix[0][0] = 1;
Reflection_matrix[1][1] = -1;
Reflection_matrix[2][2] = 1;
break;
case 2:
Reflection_matrix[0][0] = -1;
Reflection_matrix[1][1] = 1;
Reflection_matrix[2][2] = 1;
break;
case 3:
Reflection_matrix[0][0] = -1;
Reflection_matrix[1][1] = -1;
Reflection_matrix[2][2] = 1;
break;
case 4:
Reflection_matrix[0][1] = 1;
Reflection_matrix[1][0] = 1;
Reflection_matrix[2][2] = 1;
break;
case 5:
Reflection_matrix[0][1] = -1;
Reflection_matrix[1][0] = -1;
Reflection_matrix[2][2] = 1;
break;
}
for(i1=0;i1<10;i1++)
for(j1=0;j1<10;j1++)
Reflection_result[i1][j1] = 0;
for(i1=0;i1<r1;i1++)
for(j1=0;j1<c2;j1++)
for(k1=0;k1<c1;k1++)
for(i=0;i<n;i++)
cout<<"\n";
for(int j=0;j<3;j++)
cout<<Reflection_result[i][j]<<"\t\t";
draw_poly(Reflection_result,n);
//closegraph();
}
int main()
int ch,n,p[10][10];
POLYGON p1;
n= p1.accept_poly(p);
p1.draw_poly(p,n);
do
int ch;
cin>>ch;
switch(ch)
case 1:
p1.translation(p,n);
break;
case 2:
p1.scaling(p,n);
break;
case 3:
p1.rotation(p,n);
break;
case 4:
p1.reflection(p,n);
break;
case 5:
p1.shearing(p,n);
break;
case 6:
exit(0);
}while(1);
return 0;
* * * * 2-D TRANSFORMATION * * * *
10
20
50
40
10 10 1
20 20 1
50 50 1
40 40 1
Original Polygon :
* * * * 2-D TRANSFORMATION * * * *
1.Translation
2.Scaling
3.Rotation
4.Reflection
5.Shearing
6.Exit
Enter X-Translation tx : 20
Enter Y-Translation ty : 30
Polygon after Translation :
* * * * 2-D TRANSFORMATION * * * *
1.Translation
2.Scaling
3.Rotation
4.Reflection
5.Shearing
6.Exit
1.Translation
2.Scaling
3.Rotation
4.Reflection
5.Shearing
6.Exit
* * * * Rotation Types * * * *
1.Clockwise Rotation
2.Anti-Clockwise Rotation
Mark1Mark2
9.99996 -10 1
19.9999 -20.0001 1
49.9998 -50.0002 1
39.9999 -40.0001 1
* * * * 2-D TRANSFORMATION * * * *
1.Translation
2.Scaling
3.Rotation
4.Reflection
5.Shearing
6.Exit