Monday, February 1, 2010

3d transformation

#include"stdio.h"
#include"conio.h"
#include"graphics.h"
#include"math.h"
void main()
{
int op,poly[20],poly1[20],poly2[20],poly3[20],tx,ty,sx,sy,xr,yr,a,i,n,t;
int gd=DETECT,gm;
clrscr();
initgraph(&gd,&gm," ");
printf("\tenter the no of edges:");
scanf("%d",&n);
n=n+1;
t=2*n;
for(i=0;i < t;i+=2)
{
printf("\tenter the x and y co-ordinates");
scanf("%d%d",&poly[i],&poly[i+1]);
poly[i]=poly[i]+40;
poly[i+1]=poly[i+1]+40;
poly1[i]=poly[i]+90;
poly1[i+1]=poly[i+1]+90;
}
poly[t]=poly[0];
poly[t+1]=poly[1];
poly1[t]=poly1[0];
poly1[t+1]=poly1[1];
do
{
sleep(2);
clrscr();
cleardevice();
outtextxy(120,120,"original image");
drawpoly(n,poly);
drawpoly(n,poly1);
for(i=0;i line(poly[i],poly[i+1],poly1[i],poly1[i+1]);
printf("\t\t3D TRANFORMATION:\n\t1.translation\n\t2.scaling\n\t3.rotate\n\t4.exit\n");
printf("\n\n\n\nenter the your option:");
scanf("%d",&op);
switch(op)
{
case 1:
printf("\n\tenter the translation factor:");
scanf("%d %d",&tx,&ty);
for(i=0;i < t;i+=2)
{
poly2[i]=poly[i]+tx;
poly2[i+1]=poly[i+1]+ty;
poly3[i]=poly1[i]+tx;
poly3[i+1]=poly1[i+1]+ty;
}
poly2[t]=poly2[0];
poly2[t+1]=poly2[1];
poly3[t]=poly3[0];
poly3[t+1]=poly3[1];
drawpoly(n,poly2);
drawpoly(n,poly3);
for(i=0;i line(poly2[i],poly2[i+1],poly3[i],poly3[i+1]);
break;
case 2:
printf("\t enter the scaling factor:");
scanf("%d%d",&sx,&sy);
for(i=0;i < t ;i+=2)
{
poly2[i]=poly[i]*sx;
poly2[i+1]=poly[i+1]*sy;
poly3[i]=poly1[i]*sx;
poly3[i+1]=poly1[i+1]*sy;
}
poly2[t]=poly2[0];
poly2[t+1]=poly2[1];
poly3[t]=poly3[0];
poly3[t+1]=poly3[1];
drawpoly(n,poly2);
drawpoly(n,poly3);
for(i=0;i line(poly2[i],poly2[i+1],poly3[i],poly3[i+1]);
break;
case 3:
printf("\tenter rotation factor:");
scanf("%d %d%d",&xr,&yr,&a);
for(i=0;i < t;i+=2)
{
poly2[i]=xr+((poly[i]-xr)*cos(a))-((poly[i+1]-yr)*sin(a));
poly2[i+1]=yr+((poly[i+1]-yr)*cos(a))-((poly[i]-xr)*sin(a));
poly3[i]=xr+((poly1[i]-xr)*sin(a))+((poly1[i+1]-yr)*cos(a));
poly3[i+1]=yr+((poly1[i+1]-yr)*sin(a))+((poly1[i]-xr)*cos(a));
}
poly2[t]=poly2[0];
poly2[t+1]=poly2[1];
poly3[t]=poly3[0];
poly3[t+1]=poly3[1];
drawpoly(n,poly2);
drawpoly(n,poly3);
for(i=0;i line(poly2[i],poly2[i+1],poly3[i],poly3[i+1]);
sleep(2);
break;
case 4:
exit(0);
}
}
while(op < =4);
getch();
closegraph();
}