Friday, December 4, 2009

TrAnSFoRmAtIoNs..

#include
#include
#include
#include
#include
#define round(a)((int)(a+0.5))
# define pi 3.1428
float a[3][3];b[3],c[3];int n,x[20],y[20];
void ddaline(int x1,int y1,int x2,int y2,int col)
{ int dx,dy,steps,k;
float x,y,xinc,yinc;
dx=x2-x1;
dy=y2-y1;
if(abs(dx)>abs(dy))
steps=abs(dx);
else
steps=abs(dy);
xinc=(float) dx/steps;
yinc=(float) dy/steps;
x=x1;y=y1;
for(k=0;k { putpixel(round(x),round(y),col);
x+=xinc;
y+=yinc;
}
}
void parcir(int xc,int yc,float r,int col)
{ int k=0; float x,y;
for(k=0;k<360;k++)
{ x=xc+r*cos(pi*k/180);
y=yc+r*sin(pi*k/180);
putpixel(round(x),round(y),col);
delay(10);
}

}
void daxis()
{ ddaline(0,240,640,240,WHITE);
ddaline(320,0,320,480,WHITE);
}
//==================
void mulmat()
{ int k,j;


for (j=0;j<3;j++)
{ c[j]=0;
for(k=0;k<3;k++)
{ c[j]+=a[j][k]*b[k];
}
}
}

// **************************
void main()
{ int gd,gm;
detectgraph(&gd,&gm);
int cho,ch=1,choice,i,j; int tx,ty,ang;float sx,sy,shx,shy;
initgraph(&gd,&gm,"..\\bgi");
printf("\n enter the no of sides of polygon\n");
scanf("%d",&n);
printf("\n enter the end points of polygon\n");
for(i=0;i {
scanf("%d",&x[i]);
x[i]+=320;
scanf("%d",&y[i]);
y[i]=240-y[i];
}
x[i]=x[0];y[i]=y[0]; cleardevice();
printf("\n coordinate axes");
daxis();
for(i=0;i {
ddaline(x[i],y[i],x[i+1],y[i+1],YELLOW);
}

do{
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
{ a[i][j]=0;
}
}
printf("\n menu");
printf("\n 1>translation\n2>scaling\n3>rotation \n 4>shearing \n 5>reflection");
scanf("%d",&cho);
switch(cho)
{case 1: printf("\n enter x disp n y disp");
scanf("%d ",&tx);
scanf("%d",&ty);
a[0][0]=1;a[0][2]=tx;
a[1][1]=1;
a[1][2]=ty;
a[2][2]=1;
for(i=0;i { x[i]=x[i]-320;y[i]=240-y[i];
b[0]=x[i];b[1]=y[i];
b[2]=1;
mulmat();
x[i]=c[0];y[i]=c[1];
x[i]=x[i]+320;
y[i]=240-y[i];
}
x[i]=x[0];y[i]=y[0];
for(i=0;i { ddaline(x[i],y[i],x[i+1],y[i+1],RED);
}

// trans(tx,ty);
break;
case 2: printf("\n enter scaling factors in x and y directions");
scanf("%f",&sx);
scanf("%f",&sy);
a[0][0]=sx;
a[1][1]=sy;
a[2][2]=1;
for(i=0;i {
x[i]=x[i]-320;y[i]=240-y[i];
b[0]=x[i];b[1]=y[i];b[2]=1;
mulmat();
x[i]=c[0];y[i]=c[1];
x[i]=x[i]+320;y[i]=240-y[i];
}
x[i]=x[0];y[i]=y[0];
cleardevice();
daxis();
for(i=0;i { ddaline(round(x[i]),round(y[i]),
round(x[i+1]),round(y[i+1]),RED);
}

break;

case 3:
printf("\n enter the angle of rotation(give -ve for anti clckwise)");
scanf("%d",&ang);
ang=(ang*pi/180);
a[0][0]=cos(ang);
a[0][1]=-sin(ang);

a[1][0]=sin(ang);
a[1][1]=cos(ang);
for(i=0;i {x[i]=x[i]-320;y[i]=240-y[i];

b[0]=x[i];b[1]=y[i];b[2]=1;
mulmat();
x[i]=c[0];y[i]=c[1];
x[i]=x[i]+320;y[i]=240-y[i];
}
x[i]=x[0];y[i]=y[0];
cleardevice();
daxis();
for(i=0;i { ddaline(round(x[i]),round(y[i]),
round(x[i+1]),round(y[i+1]),RED);
}


break;
case 4: printf("\n 1>in x dir \n 2> in y dir");

scanf("%d",&choice);
if(choice==1)
{ printf("\n enter shx");
scanf("%f",&shx);
a[0][0]=1;a[0][1]=shx;
a[1][1]=1;
a[2][2]=2;

for(i=0;i { x[i]=x[i]-320;y[i]=240-y[i];
b[0]=x[i];b[1]=y[i];
b[2]=1;
mulmat();
x[i]=c[0];y[i]=c[1];

x[i]=x[i]+320;y[i]=240-y[i];
}
x[i]=x[0];y[i]=y[0];

}
else
{ printf("\n enter shy");
scanf("%f",­);
a[0][0]=1;
a[1][0]=shy;a[1][1]=1;
a[2][2]=1;
for(i=0;i { x[i]=x[i]-320;y[i]=240-y[i];
b[0]=x[i];b[1]=y[i];
b[2]=1;
mulmat();
x[i]=c[0];y[i]=c[1];

x[i]=x[i]+320;y[i]=240-y[i];
}
x[i]=x[0]; y[i]=y[0];
}

daxis();
for(i=0;i { ddaline(x[i],y[i],x[i+1],y[i+1],RED);
}


break;
case 5:
printf("\n 1>ref abt x axis \n 2>ref abt y axis");
scanf("%d",&choice);
if(choice==1)
{ a[0][0]=1;
a[1][1]=-1;
a[2][2]=1;
for(i=0;i { x[i]=x[i]-320;y[i]=240-y[i];
b[0]=x[i];b[1]=y[i];
b[2]=1;
mulmat();
x[i]=c[0];y[i]=c[1];

x[i]=x[i]+320;y[i]=240-y[i];
}
x[i]=x[0];y[i]=y[0];
}

else
{
a[0][0]=-1;a[1][1]=1;a[2][2]=1;
for(i=0;i {x[i]=x[i]-320;y[i]=240-y[i];
b[0]=x[i];b[1]=y[i];
b[2]=1;
mulmat();
x[i]=c[0];y[i]=c[1];

x[i]=x[i]+320;y[i]=240-y[i];
}


x[i]=x[0];y[i]=y[0];
}
cleardevice();
daxis();
for(i=0;i { ddaline(x[i],y[i],x[i+1],y[i+1],RED);
}


break;
default:printf("\n wrong choice");
}
printf("\n press 1 to continue 2 to exit");
scanf("%d",&ch);
}while(ch==1);
getch();
}

No comments:

Post a Comment