3D Transformations - Line - Graphics & Multimedia Lab - C++ Program

3D Transformations for a  Line 
Translation, Scaling , Rotation about X,Y & Z axis 
Graphics & Multimedia Lab - C++ Program

Sourcecode:
#include<graphics.h>
#include<iostream>
#include<math.h>

using namespace std;

int gd=DETECT,gm;
int x1=0,y11=0,x2=0,y2=0,z1=0,z2=0,dx=0,dy=0,dz=0,px=0,c,y;
float r,r1,rx1,ry1,rx2,ry2,rz1,rz2;
FILE *fp,*op;

void trans();
void scale();
void rotate_x();
void rotate_y();
void rotate_z();

int  main()
{
 initgraph(&gd,&gm,NULL);
 fp=fopen("input3d.txt","r");
 op=fopen("output3d.txt","w");
 fscanf(fp,"%d %d %d %d %d %d",&x1,&y11,&z1,&x2,&y2,&z2);
 y=getmaxy();
 fprintf(op,"%s","\n-----3D TRANSFORMATION FOR LINE-----\n");
 fprintf(op,"%s","\nEnd Points of Input Line:\n");
 fprintf(op,"( %d %d %d) ( %d %d %d) \n",x1,y11,z1,x2,y2,z2);
 // Scanning coordinates of end points of input line form the file input3d.txt
 printf("\n\t\t-----3D TRANSFORMATION FOR LINE-----\nScanning coordinates of end points of input line from the file input3d.txt...");
 printf("\n\nTranslation:");
 trans();
 printf("\n\nScaling:");   
 scale();
 printf("\n\nRotation about X-axis:");
 rotate_x();
 printf("\n\nRotation about Y-axis:");
 rotate_y();
 printf("\n\nRotation about Z-axis:");
 rotate_z();
 fclose(fp);
 fclose(op);
 getch();
 closegraph();
 return 0;
}

void trans()
{
  fp=fopen("transinput.txt","r");
  fscanf(fp,"%d %d %d",&dx,&dy,&dz);
  printf("\nScanning translation amounts from the file transinput.txt...");
  fprintf(op,"%s","\nTranslated Points:\n");
  fprintf(op,"(%d %d %d) (%d %d %d)\n\n",x1+dx,y11+dy,z1+dz,x2+dx,y2+dy,z2+dz);
}

void scale()
{
  printf("\nScanning scale factors from the file scaleinput.txt...");
  fp=fopen("scaleinput.txt","r");
  fscanf(fp,"%d%d%d",&dx,&dy,&dz);
  fprintf(op,"%s","Scaled Points:\n");
  fprintf(op,"(%d %d %d) (%d %d %d)\n\n",x1*dx,y11*dy,z1*dz,x2*dx,y2*dy,z2*dz);
}

void rotate_x()
{
  printf("\nScanning angle of rotation from the file rotninput.txt...");
  fp=fopen("rotninput.txt","r");
  fscanf(fp,"%f",&r);
  r1=r*3.14/180.;
  rx1=x1;
  ry1=y11*cos(r1)-z1*sin(r1);
  rz1=y11*sin(r1)+z1*cos(r1);
  rx2=x2;
  ry2=y2*cos(r1)-z2*sin(r1);
  rz2=y2*sin(r1)+z2*cos(r1);
  fprintf(op,"%s","Points after rotation about X-axis:\n");
  fprintf(op,"%f %f %f %f %f %f\n\n",rx1,ry1,rz1,rx2,ry2,rz2);
}

void rotate_y()
{
  printf("\nScanning angle of rotation from the file rotninput.txt...");
  fp=fopen("rotninput.txt","r");
  fscanf(fp,"%f",&r);
  r1=r*3.14/180.;
  rx1=z1*sin(r1)+x1*cos(r1);
  ry1=y11;
  rz1=z1*cos(r1)-x1*sin(r1);
  rx2=z2*sin(r1)+x2*cos(r1);
  ry2=y2;
  rz2=z2*cos(r1)-x2*sin(r1);
  fprintf(op,"%s","Points after rotation about Y-axis:\n");
  fprintf(op,"%f %f %f %f %f %f\n\n",rx1,ry1,rz1,rx2,ry2,rz2);
}

void rotate_z()
{
  printf("\nScanning angle of rotation from the file rotninput.txt...");
  fp=fopen("rotninput.txt","r");
  fscanf(fp,"%f",&r);
  r1=r*3.14/180.;
  rx1=x1*cos(r1)-y11*sin(r1);
  ry1=x1*sin(r1)+y11*cos(r1);
  rz1=z1;
  rx2=x2*cos(r1)-y2*sin(r1);
  ry2=x2*sin(r1)+y2*cos(r1);
  rz2=z2;
  fprintf(op,"%s","Points after rotation about Z-axis:\n");
  fprintf(op,"%f %f %f %f %f %f\n\n",rx1,ry1,rz1,rx2,ry2,rz2);
}
Input:

input3d.txt
33 44 55 132 111 121


transinput.txt
10 20 30 


scaleinput.txt
10 10 10 


rotninput.txt
 30.00

Output:

nn@linuxmint ~ $ g++ lab12.cpp -lgraph
nn@linuxmint ~ $ ./a.out
nn@linuxmint ~ $ 


-----3D TRANSFORMATION FOR LINE-----

End Points of Input Line:
( 33 44 55) ( 132 111 121) 

Translated Points:
(43 64 85) (142 131 151)

Scaled Points:
(330 440 550) (1320 1110 1210)

Points after rotation about X-axis:
33.000000 10.623602 69.628578 132.000000 35.671371 160.279617

Points after rotation about Y-axis:
56.070572 44.000000 31.146282 174.805054 111.000000 38.835480

Points after rotation about Z-axis:
6.593334 54.603371 55.000000 58.858391 162.113205 121.000000


Related Posts Plugin for WordPress, Blogger...