Friday 14 October 2011

THREE DIMENSIONAL TRANSFORMATION


THREE DIMENSIONAL TRANSFORMATION
EX.NO:7

AIM
To perform the various 3-dimensional transformations such as translation, scaling, rotation.

Algorithm
Step 1: Input the figure.
Step 2: Display the menu as 1.Translation 2.Scaling 3.Rotation 4.Exit
Step 3: Get the choice from the user.
Step 4: If the choice is 1 a point or an object is translated from position P to position P' with the operation P'=T.P where tx,ty and tz specifying translation distances.
x'=x+ tx
y'=y+ ty
z'=z+ tz
Step 5: If the choice is 2 the scaling transformation of a position P can be written as P'=S.P where scaling parameters sx,sy and sz are assigned any positive values.
x'=x.sx
y'=y.sy
z'=z.sz
Step 6: If the choice is 3 get the rotation angle. Rotate the figure with respect to the axis of rotation.
Step 6a: About z axis rotation
x'=xcosӨ-ysinӨ
y'=xsinӨ+ycosӨ
z'=z
Rotation can be expressed as P'=Rz(Ө).P
Step 6b: About x axis rotation
y'=ycosӨ-zsinӨ
z'=ysinӨ+zcosӨ
x'=x
Rotation can be expressed as P'=Rx(Ө).P
Step 6c: About y axis rotation
z'=zcosӨ-xsinӨ
x'=zsinӨ+xcosӨ
y'=y
Rotation can be expressed as P'=Ry(Ө).P
Step 7: If choice is 4 exit the program.

PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
int maxx,maxy,midx,midy;
void axis()
{
getch();
cleardevice();
line(midx,0,midx,maxy);
line(0,midy,maxx,midy);
}

void main()
{
int gd,gm,x,y,z,o,x1,x2,y1,y2;
detectgraph(&gd,&gm);
initgraph(&gd,&gm," ");
setfillstyle(0,getmaxcolor());
maxx=getmaxx();
maxy=getmaxy();
midx=maxx/2;
midy=maxy/2;
axis();
bar3d(midx+50,midy-100,midx+60,midy-90,5,1);
printf("Enter Translation Factor");
scanf("%d%d%d",&x,&y,&z);
axis();
printf("after translation");
bar3d(midx+(x+50),midy-(y+100),midx+x+60,midy-(y+90),5,1);
axis();
bar3d(midx+50,midy+100,midx+60,midy-90,5,1);
printf("Enter Scaling Factor");
scanf("%d%d%d",&x,&y,&z);
axis();
printf("After Scaling");
bar3d(midx+(x*50),midy-(y*100),midx+(x*60),midy-(y*90),5*z,1);
axis();
bar3d(midx+50,midy-100,midx+60,midy-90,5,1);
printf("Enter Rotating Angle");
scanf("%d",&o);
x1=50*cos(o*3.14/180)-100*sin(o*3.14/180);
y1=50*cos(o*3.14/180)+100*sin(o*3.14/180);
x2=60*sin(o*3.14/180)-90*cos(o*3.14/180);
y2=60*sin(o*3.14/180)+90*cos(o*3.14/180);
axis();
printf("After Rotation about Z Axis");
bar3d(midx+x1,midy-y1,midx+x2,midy-y2,5,1);
axis();
printf("After Rotation about X Axis");
bar3d(midx+50,midy-x1,midx+60,midy-x2,5,1);
axis();
printf("After Rotation about Y Axis");
bar3d(midx+x1,midy-100,midx+x2,midy-90,5,1);
getch();
closegraph();
}

OUTPUT
  Translation
  Enter Translation Factor : 50 60 70

0 comments:

Post a Comment