2D ROTATION
CODING:
#include<stdio.h>#include<conio.h>
#include<graphics.h>
#include<math.h>
#include<process.h>
//void rotate(int x1[],int y1[]);
//void object_poly(int m[],int n[]);
int i,s;
void main()
{
int gd=DETECT,gm,x[10],y[10];
initgraph(&gd,&gm," ");
clrscr();
printf("\n Enter the value for total no.of co_ordinates:");
scanf("%d",&s);
if(s<2)
{
printf("\n sufficient co_ordinates");
exit(0);
getch();
}
printf("\n Enter the co-ordinates one by one");
for(i=1;i<=s;i++)
{
printf("\nco_ordinates %d",i);
scanf("%d%d",&x[i],&y[i]);
x[i]+=300;
y[i]=240-y[i];
}
cleardevice();
object_poly(x,y);
line(20,240,600,240);
line(300,20,300,450);
outtextxy(600,237,">x");
outtextxy(0,237,"_x<");
outtextxy(297,17,"^y");
outtextxy(297,447,"v-y");
rotate(x,y);
setcolor(1);
getch();
}
object_poly(int m[],int n[])
{
for(i=1;i<s;i++)
line(m[i],n[i],m[i+1],n[i+1]);
line(m[1],n[1],m[i],n[i]);
}
rotate(int x1[],int y1[])
{
int p,q,a[10],b[10];
float angle;
outtextxy(120,130,"Enter fixed point");
scanf("%d%d",&p,&q);
p+=300;
q=240-q;
printf("Enter the Rotation Angle");
scanf("%f",&angle);
angle=-angle;
//cleardevice();
angle=(angle*3.14)/180;
for(i=1;i<=s;i++)
{
a[i]=p+(x1[i]-p)*cos(angle)-(y1[i]-p)*sin(angle);
b[i]=q+(x1[i]-q)*cos(angle)+(y1[i]-q)*sin(angle);
}
outtextxy(90,10,"After Rotation");
object_poly(a,b);
}
Comments
Post a Comment