荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: 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软件 网络书店