Thursday, August 11, 2011

3D-Rotation

 # include <stdio.h>
 # include <graphics.h>
 # include  <conio.h>
 # include <math.h>
 #include<stdlib.h>
 int ch;
 int i,j,k,angle;
 void x_axis( int [5][3], int);
 void y_axis( int [5][3], int);
 void z_axis( int [5][3], int);
 void mult( int[5][3],float[4][4],float[5][3]);
 float y[4][4],x[4][4],z[4][4];
 void draw(int [5][3]);
 int s[5][3]={
        {40,130,50},      //  The co-ordinates
        {120,130,50},      //  to make a
        {160,90,-50},    //  pyramid
        {70,90,-50},   
        {80,20,0}       
         };
 float matrix_a;
 float matrix_b;
 float c[4][3];
 void main( )
 {
    int driver=DETECT,mode;
    initgraph(&driver,&mode,"");
    draw(s);
    printf("\n1.X_axis,2.Y_axis,3.Z_axis");
    printf("\nEnter ur choice:");
    scanf("%d",&ch);
    printf("Enter the angle:");
    scanf("%d",&angle);
    cleardevice();
    switch(ch)
    {
          case 1:
              x_axis(s,angle);
              break;
          case 2:
              y_axis(s,angle);
              break;
          case 3:
              z_axis(s,angle);
              break;
          default:
              exit(0);
    }
  getch();
  }
void x_axis( int p[5][3], int theta)
{
    float angle=(theta*(3.14/180));
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            x[i][j]=0;
    //Matrix Initialization
    x[1][1]=cos(angle);x[1][2]=-sin(angle);
    x[2][1]=sin(angle);x[2][2]=cos(angle);
    x[0][0]=1;

    mult(p,x,c);

    for(i=0;i<5;i++)
        for(j=0;j<3;j++)
             p[i][j]=(int)(c[i][j]+0.5);
    draw(p);
}
void y_axis( int p[5][3], int theta)
{
    float angle=(theta*(3.14/180));
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            y[i][j]=0;
    y[0][0]=cos(angle);y[0][1]=-sin(angle);
    y[2][0]=sin(angle);y[2][1]=cos(angle);
    y[1][1]=1;

    mult(p,y,c);
    for(i=0;i<5;i++)
        for(j=0;j<3;j++)
            p[i][j]=(int)(c[i][j]+0.5);
    draw(p);
}
void z_axis( int p[5][3], int theta)
{
float angle=(theta*(3.14/180));
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            z[i][j]=0;
    z[0][0]=cos(angle);z[0][1]=-sin(angle);
    z[1][0]=sin(angle);z[1][1]=cos(angle);
    z[2][2]=1;

    mult(p,z,c);
    for(i=0;i<5;i++)
        for(j=0;j<3;j++)
             p[i][j]=(int)(c[i][j]+0.5);
    draw(p);
}


 void mult( int matrix_1[5][3],float matrix_2[4][4],float matrix_3[5][3])
    {
      for(i=0;i<5;i++)
      {
    for(j=0;j<3;j++)
    for( k=0;k<3;k++)
    matrix_3[i][j]+=(matrix_1[i][k]*matrix_2[k][j]);
      }
    }


 void draw(int points[5][3])
    {
      int a[5][3];

      for(i=0;i<5;i++)
      {
    a[i][0]=points[i][0];
    a[i][1]=points[i][1];
    a[i][2]=points[i][2];
     a[i][1]+=240;
     a[i][0]+=240;
      }

      line(a[0][0],a[0][1],a[1][0],a[1][1]);
      line(a[1][0],a[1][1],a[2][0],a[2][1]);
      line(a[2][0],a[2][1],a[3][0],a[3][1]);
      line(a[3][0],a[3][1],a[0][0],a[0][1]);

      line(a[0][0],a[0][1],a[4][0],a[4][1]);
      line(a[1][0],a[1][1],a[4][0],a[4][1]);
      line(a[2][0],a[2][1],a[4][0],a[4][1]);
      line(a[3][0],a[3][1],a[4][0],a[4][1]);
    }

No comments:

Post a Comment

Please put your valuable comments