基于C的三维图形投影变换

作者在 2007-06-30 04:47:00 发布以下内容

这个纯粹在为了作业而写的,或许因为我的方向不在计算机图形学方面吧,因此对这门学科没有深入的研究,希望不会遗笑大方!用C语言实现对三维图形的投影变换,在屏幕上打印出立体图形的三视图与轴测图

#include"math.h"
#include "graphics.h"


    int num[12][2]={{0,1},{1,2},{2,3},{3,4},{4,5},{5,6},{6,7},{0,5},{1,6},{2,7},{7,4},{3,0}};
    float pp[8][2];
    float t[4][4];
    float xx,yy;
    int p[8][4]={{12,15,25,1},{0,15,25,1},{0,15,0,1},{35,15,0,1},{35,0,0,1},{12,0,25,1},{0,0,25,1},{0,0,0,1}};
    float xs,ys,xe,ye;
    int i,a;

 main()                /*函数入口,由这里开始*/
{
    int gd=DETECT,gm;
    initgraph(&gd,&gm,"");

     setcolor(3);
     left();
     bottom();
     right();
     zc();
     zc2();

    getch();
    closegraph();
}

left()           /*调用主视图变换矩阵,画主视图子程序*/
 {
  left1();
  for(i=0;i<8;i++)
   {
    pp[0]=affincx(p[0],p[1],p[2]);
    pp[1]=affincz(p[0],p[1],p[2]);
   }
   drawline(200,120);
 }

bottom()      /*调用俯视图变换矩阵,画俯视图子程序*/

{
   bottom1();
   for(i=0;i<8;i++)
   {
    pp[0]=affincx(p[0],p[1],p[2]);
    pp[1]=affincz(p[0],p[1],p[2]);
   }
    drawline(200,200);
 }

right()     /*调用右视图变换矩阵,画右视图子程序*/

{
  right1();
  for(i=0;i<8;i++)
   {
     pp[0]=affincx(p[0],p[1],p[2]);
     pp[1]=affincz(p[0],p[1],p[2]);
   }
    drawline(300,120);

 }
zc()     /*调用轴测图变换矩阵,画轴测图子程序*/

 {
  zc1();
  for(i=0;i<8;i++)
  {
    pp[0]=affincx(p[0],p[1],p[2]);
    pp[1]=affincz(p[0],p[1],p[2]);
  }
   drawline(350,230);

}

zc2()    /*调用绕Z轴变换的轴测图矩阵,画绕Z轴旋转轴测图子程序*/

 {
  for(a=0;a<=360;a+=120)
  {
  zc11();
  for(i=0;i<8;i++)
  {
    pp[0]=affincx(p[0],p[1],p[2]);
    pp[1]=affincz(p[0],p[1],p[2]);
  }
   setcolor(GREEN);
   drawline(480,380);
  }
}

left1()    /*主视图矩阵*/
{
 t[0][0]=1;t[0][1]=0;t[0][2]=0;t[0][3]=0;
 t[1][0]=0;t[1][1]=0;t[1][2]=0;t[1][3]=0;
 t[2][0]=0;t[2][1]=0;t[2][2]=1;t[2][3]=0;
 t[3][0]=0;t[3][1]=0;t[3][2]=0;t[3][3]=1;
}

bottom1()  /*俯视图矩阵*/
{
 t[0][0]=1;t[0][1]=0;t[0][2]=0;t[0][3]=0;
 t[1][0]=0;t[1][1]=0;t[1][2]=-1;t[1][3]=0;
 t[2][0]=0;t[2][1]=0;t[2][2]=0;t[2][3]=0;
 t[3][0]=0;t[3][1]=0;t[3][2]=-20;t[3][3]=1;
}

right1()   /*右视图矩阵*/
{
 t[0][0]=0;t[0][1]=0;t[0][2]=0;t[0][3]=0;
 t[1][0]=-1;t[1][1]=0;t[1][2]=0;t[1][3]=0;
 t[2][0]=0;t[2][1]=0;t[2][2]=1;t[2][3]=0;
 t[3][0]=-20;t[3][1]=0;t[3][2]=0;t[3][3]=1;
}

zc1()     /*轴测图矩阵*/
{
  double t1,t2;
  t1=30.0*3.1415927/180;t2=45.0*3.1415927/180;
  t[0][0]=cos(t1);t[0][1]=0.0;t[0][2]=-sin(t1)*sin(t2);t[0][3]=0.0;

默认分类 | 阅读 3564 次
文章评论,共0条
游客请输入验证码