C program for translations-scaling -rotation-reflection
#include<iostream.h>#include<conio.h>
#include<graphics.h>
long double object[10][10],translate[10][10],translate2[10][10],output[10][10],theta;
long double scale[10][10], mirror[10][10],rotate[10][10],output2[10][10],output3[10][10];
int n ,i,j,k;
void init(long double a[10][10])
{ for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=0;
}
void input(long double a[10][10],int b)
{for( i=0;i<b;i++)
{cout<<"\nenter row #"<<i+1<<endl;
cin>>a[i][0]>>a[i][1]>>a[i][2];
}
}
void matmulti(long double a[10][10],long double b[10][10],long double c[10][10])
{for(i=0;i<n;i++)
for(j=0;j<3;j++)
for(k=0;k<n;k++)
c[i][j]+=a[i][k]*b[k][j];
}
void display(long double a[10][10])
{ for(i=0;i<n-1;i++)
line(a[i][0],a[i][1],a[i+1][0],a[i+1][1]);
line(a[0][0],a[0][1],a[n-1][0],a[n-1][1]);
}
void matdisp(long double a[10][10],int b)
{ for(i=0;i<b;i++)
{for(j=0;j<3;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
void matdisp(long double a[10][10],long double b[10][10],long double c[10][10])
{ for(i=0;i<3;i++)
{for(j=0;j<3;j++)
cout<<a[i][j]<<" ";
cout<<" ";
for(j=0;j<3;j++)
cout<<b[i][j]<<" ";
cout<<" ";
for(j=0;j<3;j++)
cout<<c[i][j]<<" ";
cout<<endl;
}
}
void matdisp(long double a[10][10],long double b[10][10])
{ for(i=0;i<n;i++)
{for(j=0;j<3;j++)
cout<<a[i][j]<<" ";
cout<<" ";
for(j=0;j<3;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
}
int main()
{clrscr();
int i,j,ch,gd=DETECT,gm;
long double theta;
char choice='n';
do{
if(choice=='n')
{cout<<"\n enter the no of verices in the figure";
cin>>n;
cout<<"\ enter the object matrix";
input(object,n);
}
initgraph(&gd,&gm,"");
display(object);
getch();
closegraph();
cout<<"\n choose an operation";
cout<<"\n 0.translate ";
cout<<"\n 1.simple scale";
cout<<"\n 2.fix point scale";
cout<<"\n 3.simple rotate";
cout<<"\n 4.fix point rotate";
cout<<"\n 5.reflection about x-axis";
cout<<"\n 6.reflection about y- axis";
cout<<"\n Enter CHOICE : ";
cin>>ch;
if(ch==0)
{ cout<<"\n enter the translation matrix";
input(translate,3);
matmulti(object,translate,output3);
cout<<endl;
cout<<"\n OBJECT MATRICX\n";
matdisp(object,n);
getch();
cout<<"\n translation matrix \n";
matdisp(translate,3);
cout<<"\n output matrix \n";
matdisp(output3,n);
getch();
}
if(ch==1)
{ cout<<"\n enter the scaling matrix";
input(scale,3);
matmulti(object,scale,output3);
cout<<endl;
cout<<"\n OBJECT MATRICX\n";
matdisp(object,n);
getch();
cout<<"\n scaling matrix \n";
matdisp(scale,3);
cout<<"\noutput matrix \n";
matdisp(output3,n);
getch();
getch();
}
if(ch==2)
{ cout<<"\n enter the translation matrix";
input(translate,3);
cout<<"\n enter the scaling matrix";
input(scale,3);
cout<<"\n enter the inverse translation matrix";
input(translate2,3);
cout<<"\n object matrix\n";
matdisp(object,n);
cout<<"\n transformation matrixes \n";
cout<<" TRANSLATION SCALING DE TRANSLATION \n";
matdisp(translate,scale,translate2);
getch();
matmulti(translate,scale,output);
matmulti(output,translate2,output2);
matmulti(object,output2,output3);
cout<<"\n output matrix is \n";
matdisp(output3,n);
cout<<endl;
getch();
}
if(ch==3)
{ cout<<"\n enter the rotation matrix";
input(rotate,3);
matmulti(object,rotate,output3);
cout<<endl;
cout<<"\n OBJECT MATRICX\n";
matdisp(object,n);
getch();
cout<<"\n rotation matrix \n";
matdisp(rotate,3);
cout<<"\n output matrix \n";
matdisp(output3,n);
getch();
}
if(ch==4)
{ cout<<"\n enter the translation matrix";
input(translate,3);
cout<<"\n enter the rotation matrix";
input(rotate,3);
cout<<"\n enter the inverse translation matrix";
input(translate2,3);
cout<<"\n object matrix\n";
matdisp(object,n);
cout<<"\n transformation matrixes \n";
cout<<" TRANSLATION ROTATION DE TRANSLATION \n";
matdisp(translate,rotate,translate2);
getch();
matmulti(translate,rotate,output);
matmulti(output,translate2,output2);
matmulti(object,output2,output3);
cout<<"\n output matrix is \n";
matdisp(output3,n);
cout<<endl;
getch();
}
if(ch==5)
{ translate[2][1]=-240;
translate[2][0]=0;
translate[0][0]=1;
translate[1][1]=1;
translate[2][2]=1;
cout<<"\nenter reflection matrix\n";
input(mirror,3);
matmulti(translate,mirror,output);
translate[2][1]=240;
matmulti(output,translate,output2);
matmulti(object,output2,output3);
cout<<"\n input matrix\n";
matdisp(object,n);
getch();
cout<<"\n mirror matrix\n";
matdisp(mirror,3);
getch();
cout<<"\n output matric\n";
matdisp(output3,n);
getch();
}
if(ch==6)
{ translate[2][0]=-320;
translate[2][1]=0;
translate[0][0]=1;
translate[1][1]=1;
translate[2][2]=1;
cout<<"\nenter reflection matrix\n";
input(mirror,3);
matmulti(translate,mirror,output);
translate[2][0]=320;
matmulti(output,translate,output2);
matmulti(object,output2,output3);
cout<<"\n input matrix\n";
matdisp(object,n);
getch();
cout<<"\n mirror matrix\n";
matdisp(mirror,3);
getch();
cout<<"\n output matric\n";
matdisp(output3,n);
getch();
}
initgraph(&gd,&gm,"");
display(object);
setcolor(12);
display(output3);
if(ch==5||ch==6)
{setcolor(10);
line(0,240,640,240);
setcolor(11);
line(320,0,320,480);
}
getch();
closegraph();
init(output);
init(output2);
init(output3);
cout<<"\n want to go to main menu (y/n)\n";
choice=getche();
}while(choice!='n');
return 0;
}