Mar 18, 2010

2D Modeling: 2D Rotation

// This is 2D Rotation program using C language

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
float ans[3][10];
void multi(float tmat[3][3],float coormat[3][10],int size);
void main()
{
float coormat[3][10],x[10],y[10],temp;
int gd=DETECT,gm,no,sx,sy,sum=0,i,j,k,theta;
float tmat[3][3]={{1,0,0},{0,1,0},{0,0,1}};
clrscr();
initgraph(&gd,&gm,"..\\bgi");
printf("enter theta:"),scanf("%d",&theta);
temp=(float)theta*3.14/180;
tmat[0][0]=cos(temp);
tmat[1][1]=cos(temp);
tmat[0][1]=-1*sin(temp);
tmat[1][0]=-1*sin(temp);
printf("Translation matrix is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4.1f\t",tmat[i][j]);
printf("\n");
}
printf("enter no. of vertices:\n"),scanf("%d",&no);
for(i=0;i<no;i++)
printf("enter (x%d,y%d):\n",i+1,i+1),scanf("%f%f",&x[i],&y[i]);
for(i=0;i<no;i++)
coormat[0][i]=x[i];
for(i=0;i<no;i++)
coormat[1][i]=y[i];
for(i=0;i<no;i++)
coormat[2][i]=1;
printf("co ordinate matrix is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<no;j++)
printf("%4.2f\t",coormat[i][j]);
printf("\n");
}
//printing starting line
for(j=0;j<no-1;j++)
line(coormat[0][j],coormat[1][j],coormat[0][j+1],coormat[1][j+1]);
line(coormat[0][0],coormat[1][0],coormat[0][j],coormat[1][j]);
multi(tmat,coormat,no);
printf("answer matrix is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<no;j++)
printf("%4.2f\t",ans[i][j]);
printf("\n");
}

for(j=0;j<no-1;j++)
line(ans[0][j],ans[1][j],ans[0][j+1],ans[1][j+1]);
line(ans[0][0],ans[1][0],ans[0][j],ans[1][j]);

getch();
}
void multi(float tmat[3][3],float coormat[3][10],int no)
{
int i,j,k,sum=0;
for(i=0;i<3;i++)
{
for(j=0;j<no;j++)
{
sum=0;
for(k=0;k<3;k++)
{
sum+=tmat[i][k]*coormat[k][j];
}
ans[i][j]=sum;
}
}
}

No comments:

Post a Comment