AIM:
To implement 3D transformation of Scaling.
ALGORITHM:
1. Scaling with respect to a select fixed position (xf,yf,zf) can be represented with the following transformation sequence.
2. Translate the fixed point to the origin
3. Scale the object relative to coordinate origin using the following matrix
X’ sx 0 0 x
y’ = 0 sy 0 . y
z’ 0 0 sz z
4. Translate the fixed point back to its original position.
SOURCE CODE:
#include
#include
#include
#include
#include
void main()
{
int n,sx,sy,d,p1[10][3],p2[10][3];
int i,gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc\\bgi");
printf("\nEnter the number of lines:");
scanf("&d",&n);
printf("\nEnter the values of edges");
for(i=1;i<=n;i++)
{
scanf("%d%d",&p1[i][1],&p1[i][2]);
}
printf("\nEnter the depth:");
scanf("%d",&d);
cleardevice();
for(i=1;i<=n;i++)
{
p2[i][1]=p1[i][1]+d;
p2[i][2]=p2[i][2]+d;
}
getch();
cleardevice();
printf("\nBefore Scaling");
for(i=1;i
{
line(p1[i][1],p1[i][2],p1[i+1][1],p1[i+1][2]);
}
line(p1[1][1],p1[1][2],p1[n][1],p1[n][2]);
for(i=1;i
{
line(p2[i][1],p2[i][2],p2[i+1][1],p2[i+1][2]);
}
line(p2[1][1],p2[1][2],p2[n][1],p2[n][2]);
for(i=1;i<=n;i++)
{
line(p1[i][1],p1[i][2],p2[i][1],p2[i][2]);
}
getch();
cleardevice();
printf("\nEnter the Scaling parameters Sx,Sy:\t");
scanf("%d%d",&sx,&sy);
for(i=1;i<=n;i++)
{
p1[i][1]=p1[1][1]-(p1[1][1]-p1[i][1])*sx;
p1[i][2]=p1[1][2]-(p1[1][2]-p1[i][2])*sy;
p2[i][1]=p2[1][1]-(p2[1][1]-p2[i][1])*sx;
p2[i][2]=p2[1][2]-(p2[1][2]-p2[i][2])*sy;
}
getch();
cleardevice();
printf("\nAfter Scaling");
for(i=1;i
{
line(p1[i][1],p1[i][2],p1[i+1][1],p1[i+1][2]);
}
line(p1[1][1],p1[1][2],p1[n][1],p1[n][2]);
for(i=1;i
{
line(p2[i][1],p2[i][2],p2[i+1][1],p2[i+1][2]);
}
line(p2[1][1],p2[1][2],p2[n][1],p2[n][2]);
for(i=1;i<=n;i++)
{
line(p1[i][1],p1[i][2],p2[i][1],p2[i][2]);
}
getch();
}
OUTPUT:
Enter the no of lines: 3
Enter the values: 50 60 55 64 85 65
Enter the depth: 95
Enter the scaling factors: 25 30
No comments:
Post a Comment