荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: playboy (为了钱,努力!), 信区: Program
标  题: 3D变换
发信站: BBS 荔园晨风站 (Wed Jan 12 08:43:49 2000), 转信

#include<stdio.h>
#include <stdlib.h>
#include<graphics.h>
#include<math.h>
#include<conio.h>

int o[6][3]={{-25,-25,0},{25,-25,0},{25,25,0},{-25,25,0},
                {0,0,50},{0,0,-50}};
int p[12][2]={{0,1},{1,2},{2,3},{3,0},
              {4,0},{4,1},{4,2},{4,3},
              {5,0},{5,1},{5,2},{5,3}};
int m[8][3]={{14,0,5},{0,14,5},{-14,0,5},{0,-14,5},
             {14,0,-5},{0,14,-5},{-14,0,-5},{0,-14,-5}};
int q[12][2]={{3,7},{0,4},{1,5},{2,6},
              {2,3},{0,3},{0,1},{1,2},
              {6,7},{4,7},{4,5},{5,6}};
int t[8];

int r,R,h=100;
void move(int,int,int );

void move(int a,int b,int c)
{
 float u,v;
 float x0,y0,z0;
 float x1,y1,z1;
 float x2,y2,z2;
 float a1,b1,c1,kk;
 float zs1,xs1,ys1;
 float zs2,xs2,ys2;
 int i,j;
 u=sqrt(a*a+b*b+c*c);
 v=sqrt(a*a+b*b);

 a1=a-o[4][0];b1=b-o[4][1];c1=c-o[4][2];
 for(i=0;i<4;i++)
  {
   kk=a1*m[i][0]+b1*m[i][1]+c1*m[i][2];
   if (kk<0) t[i]=0;
     else t[i]=1;
  }

 a1=a-o[5][0];b1=b-o[5][1];c1=c-o[5][2];
 for(i=4;i<8;i++)
  {
   kk=a1*m[i][0]+b1*m[i][1]+c1*m[i][2];
   if (kk<0) t[i]=0;
    else t[i]=1;
  }

 for(i=0;i<12;i++)
  {
   x0=o[p[i][0]][0];
   y0=o[p[i][0]][1];
   z0=o[p[i][0]][2];

   x1=-b/v*x0+a/v*y0;
   y1=-a*c/(u*v)*x0-b*c/(u*v)*y0+v/u*z0;
   z1=-a/u*x0-b/u*y0-c/u*z0+u;

   zs1=h;
   xs1=x1*zs1/z1;
   ys1=y1*zs1/z1;


   x0=o[p[i][1]][0]   z=0;
   r=R=100;
   ch=12;
   a=b=0;
   ch=getch();
   while (ch!=27)
     //if (kbhit())
       {
        ch=getch();
        setcolor(0);
        move(x,y,z);
        switch (ch) {
         case 'K': a=a-5;
                   x=cos(3.14159*a/360.0)*r;
                   y=sin(3.14159*a/360.0)*r;
                   break;
         case 'M': a=a+5;
                   x=cos(3.14159*a/360.0)*r;
                   y=sin(3.14159*a/360.0)*r;
                   break;
         case 'H': {b=b-5;
                   x=cos(3.14159*b/360.0)*R;
                   x=cos(3.14159*a/360.0)*r;
                   z=sin(3.14159*b/360.0)*R;
                   r=sqrt(R*R-z*z);
                   y=sin(3.14159*a/360.0)*r;
                   x=cos(3.14159*a/360.0)*r;
                   break;}
         case 'P': b=b+5;
                   x=cos(3.14159*b/360.0)*R;
                   x=cos(3.14159*a/360.0)*r;
                   z=sin(3.14159*b/360.0)*R;
                   r=sqrt(R*R-z*z);
                   y=sin(3.14159*a/360.0)*r;
                   x=cos(3.14159*a/360.0)*r;
                   break;
         case 'z': h=h-3;break;
         case 'x': h=h+3;break;
         case 'Z': h=h-3;break;
         case 'X': h=h+3;break;
         default :break;
         }
         setcolor(YELLOW);
        move(x,y,z);
       }
   closegraph();
   exit(0);
 }

--
※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.90]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店