1 /***************************************************************************/
2 /* */
3 /* 3D Rotating Cube. Created for Amiga and PC by Stefan Henrikson 1993. */
4 /* */
5 /* Modified for Z88 BASIC 1993, SmallC+ Z88 1998 by Dennis Groning. */
6 /* */
7 /***************************************************************************/
8
9 #include <stdio.h>
10 #include <math.h>
11 #include <graphics.h>
12
13 #define MAX_X 256.0
14 #define MAX_Y 192.0
15 #define NODES 8
16 #define SIZE 24.0
17
18 /* djm speed ups */
19
20 #define MAX_X2 128.0
21 #define MAX_Y2 32.0
22
main()23 void main()
24 {
25 double x[NODES], y[NODES], z[NODES];
26 double vx, vy, vz;
27 double xg[NODES], yg[NODES], zg[NODES];
28 double mx, my, halfangle;
29 double cx,cy,cz,sx,sy,sz;
30 double t1,t2,t3;
31 int node;
32
33 vx=0; vy=0; vz=0;
34
35 x[0]=-SIZE; y[0]=-SIZE; z[0]=-SIZE;
36 x[1]=-SIZE; y[1]= SIZE; z[1]=-SIZE;
37 x[2]= SIZE; y[2]= SIZE; z[2]=-SIZE;
38 x[3]= SIZE; y[3]=-SIZE; z[3]=-SIZE;
39 x[4]=-SIZE; y[4]=-SIZE; z[4]= SIZE;
40 x[5]=-SIZE; y[5]= SIZE; z[5]= SIZE;
41 x[6]= SIZE; y[6]= SIZE; z[6]= SIZE;
42 x[7]= SIZE; y[7]=-SIZE; z[7]= SIZE;
43
44 for(node=0;node!=NODES;node++) {
45 xg[node]=x[node];
46 yg[node]=y[node];
47 zg[node]=z[node];
48 }
49 while(getk()==0) {
50 cx=cos(vx); cy=cos(vy); sx=sin(vx); sy=sin(vy);
51 cz=cos(vz); sz=sin(vz);
52 mx=(MAX_X2-SIZE*1.8)*cos(vx)+MAX_X2;
53 my=(MAX_Y2-SIZE*1.8)*sin(vy)+MAX_Y2;
54 for(node=0;node!=NODES;node++) {
55
56 t1=yg[node]*cx-zg[node]*sx;
57 t2=yg[node]*sx+zg[node]*cx;
58 t3=xg[node]*cy;
59 x[node] = (t3 + t2*sy)*cz;
60 x[node] = x[node] - t1*sz;
61
62 y[node] = (t3 + t2*sy)*sz;
63 y[node] = y[node] + t1*cz;
64
65 z[node]=-xg[node]*sy+t2*cy;
66 }
67 vx+=0.003; vy+=0.005; vz+=0.002;
68 clg();
69 draw(x[0]+mx,y[0]+my,x[1]+mx,y[1]+my);
70 draw(x[1]+mx,y[1]+my,x[2]+mx,y[2]+my);
71 draw(x[2]+mx,y[2]+my,x[3]+mx,y[3]+my);
72 draw(x[3]+mx,y[3]+my,x[0]+mx,y[0]+my);
73 draw(x[4]+mx,y[4]+my,x[5]+mx,y[5]+my);
74 draw(x[5]+mx,y[5]+my,x[6]+mx,y[6]+my);
75 draw(x[6]+mx,y[6]+my,x[7]+mx,y[7]+my);
76 draw(x[7]+mx,y[7]+my,x[4]+mx,y[4]+my);
77 draw(x[0]+mx,y[0]+my,x[4]+mx,y[4]+my);
78 draw(x[3]+mx,y[3]+my,x[7]+mx,y[7]+my);
79 draw(x[2]+mx,y[2]+my,x[6]+mx,y[6]+my);
80 draw(x[1]+mx,y[1]+my,x[5]+mx,y[5]+my);
81 }
82 }
83