1 /* makecube.c ...for rubik.c */
3 /* started 23-Dec-89 */
7 extern struct points point
;
8 extern struct points start
;
9 extern unsigned short size
;
11 extern struct one_square square
[56]; /* 54 on cube + 2 inter-planes */
13 void init_squares() /* this defines the cubes geometry called ONCE */
17 for (face
=0; face
<2; face
++) /* small squares in xy plane */
19 (square
[9*face
+0]).corner
[0] = &(point
.xyz
[0] [0] [face
*5]);
20 (square
[9*face
+0]).corner
[1] = &(point
.xyz
[1] [0] [face
*5]);
21 (square
[9*face
+0]).corner
[2] = &(point
.xyz
[1] [1] [face
*5]);
22 (square
[9*face
+0]).corner
[3] = &(point
.xyz
[0] [1] [face
*5]);
24 (square
[9*face
+1]).corner
[0] = &(point
.xyz
[2] [0] [face
*5]);
25 (square
[9*face
+1]).corner
[1] = &(point
.xyz
[3] [0] [face
*5]);
26 (square
[9*face
+1]).corner
[2] = &(point
.xyz
[3] [1] [face
*5]);
27 (square
[9*face
+1]).corner
[3] = &(point
.xyz
[2] [1] [face
*5]);
29 (square
[9*face
+2]).corner
[0] = &(point
.xyz
[4] [0] [face
*5]);
30 (square
[9*face
+2]).corner
[1] = &(point
.xyz
[5] [0] [face
*5]);
31 (square
[9*face
+2]).corner
[2] = &(point
.xyz
[5] [1] [face
*5]);
32 (square
[9*face
+2]).corner
[3] = &(point
.xyz
[4] [1] [face
*5]);
34 (square
[9*face
+3]).corner
[0] = &(point
.xyz
[0] [2] [face
*5]);
35 (square
[9*face
+3]).corner
[1] = &(point
.xyz
[1] [2] [face
*5]);
36 (square
[9*face
+3]).corner
[2] = &(point
.xyz
[1] [3] [face
*5]);
37 (square
[9*face
+3]).corner
[3] = &(point
.xyz
[0] [3] [face
*5]);
39 (square
[9*face
+4]).corner
[0] = &(point
.xyz
[2] [2] [face
*5]);
40 (square
[9*face
+4]).corner
[1] = &(point
.xyz
[3] [2] [face
*5]);
41 (square
[9*face
+4]).corner
[2] = &(point
.xyz
[3] [3] [face
*5]);
42 (square
[9*face
+4]).corner
[3] = &(point
.xyz
[2] [3] [face
*5]);
44 (square
[9*face
+5]).corner
[0] = &(point
.xyz
[4] [2] [face
*5]);
45 (square
[9*face
+5]).corner
[1] = &(point
.xyz
[5] [2] [face
*5]);
46 (square
[9*face
+5]).corner
[2] = &(point
.xyz
[5] [3] [face
*5]);
47 (square
[9*face
+5]).corner
[3] = &(point
.xyz
[4] [3] [face
*5]);
49 (square
[9*face
+6]).corner
[0] = &(point
.xyz
[0] [4] [face
*5]);
50 (square
[9*face
+6]).corner
[1] = &(point
.xyz
[1] [4] [face
*5]);
51 (square
[9*face
+6]).corner
[2] = &(point
.xyz
[1] [5] [face
*5]);
52 (square
[9*face
+6]).corner
[3] = &(point
.xyz
[0] [5] [face
*5]);
54 (square
[9*face
+7]).corner
[0] = &(point
.xyz
[2] [4] [face
*5]);
55 (square
[9*face
+7]).corner
[1] = &(point
.xyz
[3] [4] [face
*5]);
56 (square
[9*face
+7]).corner
[2] = &(point
.xyz
[3] [5] [face
*5]);
57 (square
[9*face
+7]).corner
[3] = &(point
.xyz
[2] [5] [face
*5]);
59 (square
[9*face
+8]).corner
[0] = &(point
.xyz
[4] [4] [face
*5]);
60 (square
[9*face
+8]).corner
[1] = &(point
.xyz
[5] [4] [face
*5]);
61 (square
[9*face
+8]).corner
[2] = &(point
.xyz
[5] [5] [face
*5]);
62 (square
[9*face
+8]).corner
[3] = &(point
.xyz
[4] [5] [face
*5]);
65 for (face
=2; face
<4; face
++) /* small squares in xz plane */
67 (square
[9*face
+0]).corner
[0] = &(point
.xyz
[0] [(face
-2)*5] [0]);
68 (square
[9*face
+0]).corner
[1] = &(point
.xyz
[1] [(face
-2)*5] [0]);
69 (square
[9*face
+0]).corner
[2] = &(point
.xyz
[1] [(face
-2)*5] [1]);
70 (square
[9*face
+0]).corner
[3] = &(point
.xyz
[0] [(face
-2)*5] [1]);
72 (square
[9*face
+1]).corner
[0] = &(point
.xyz
[2] [(face
-2)*5] [0]);
73 (square
[9*face
+1]).corner
[1] = &(point
.xyz
[3] [(face
-2)*5] [0]);
74 (square
[9*face
+1]).corner
[2] = &(point
.xyz
[3] [(face
-2)*5] [1]);
75 (square
[9*face
+1]).corner
[3] = &(point
.xyz
[2] [(face
-2)*5] [1]);
77 (square
[9*face
+2]).corner
[0] = &(point
.xyz
[4] [(face
-2)*5] [0]);
78 (square
[9*face
+2]).corner
[1] = &(point
.xyz
[5] [(face
-2)*5] [0]);
79 (square
[9*face
+2]).corner
[2] = &(point
.xyz
[5] [(face
-2)*5] [1]);
80 (square
[9*face
+2]).corner
[3] = &(point
.xyz
[4] [(face
-2)*5] [1]);
82 (square
[9*face
+3]).corner
[0] = &(point
.xyz
[0] [(face
-2)*5] [2]);
83 (square
[9*face
+3]).corner
[1] = &(point
.xyz
[1] [(face
-2)*5] [2]);
84 (square
[9*face
+3]).corner
[2] = &(point
.xyz
[1] [(face
-2)*5] [3]);
85 (square
[9*face
+3]).corner
[3] = &(point
.xyz
[0] [(face
-2)*5] [3]);
87 (square
[9*face
+4]).corner
[0] = &(point
.xyz
[2] [(face
-2)*5] [2]);
88 (square
[9*face
+4]).corner
[1] = &(point
.xyz
[3] [(face
-2)*5] [2]);
89 (square
[9*face
+4]).corner
[2] = &(point
.xyz
[3] [(face
-2)*5] [3]);
90 (square
[9*face
+4]).corner
[3] = &(point
.xyz
[2] [(face
-2)*5] [3]);
92 (square
[9*face
+5]).corner
[0] = &(point
.xyz
[4] [(face
-2)*5] [2]);
93 (square
[9*face
+5]).corner
[1] = &(point
.xyz
[5] [(face
-2)*5] [2]);
94 (square
[9*face
+5]).corner
[2] = &(point
.xyz
[5] [(face
-2)*5] [3]);
95 (square
[9*face
+5]).corner
[3] = &(point
.xyz
[4] [(face
-2)*5] [3]);
97 (square
[9*face
+6]).corner
[0] = &(point
.xyz
[0] [(face
-2)*5] [4]);
98 (square
[9*face
+6]).corner
[1] = &(point
.xyz
[1] [(face
-2)*5] [4]);
99 (square
[9*face
+6]).corner
[2] = &(point
.xyz
[1] [(face
-2)*5] [5]);
100 (square
[9*face
+6]).corner
[3] = &(point
.xyz
[0] [(face
-2)*5] [5]);
102 (square
[9*face
+7]).corner
[0] = &(point
.xyz
[2] [(face
-2)*5] [4]);
103 (square
[9*face
+7]).corner
[1] = &(point
.xyz
[3] [(face
-2)*5] [4]);
104 (square
[9*face
+7]).corner
[2] = &(point
.xyz
[3] [(face
-2)*5] [5]);
105 (square
[9*face
+7]).corner
[3] = &(point
.xyz
[2] [(face
-2)*5] [5]);
107 (square
[9*face
+8]).corner
[0] = &(point
.xyz
[4] [(face
-2)*5] [4]);
108 (square
[9*face
+8]).corner
[1] = &(point
.xyz
[5] [(face
-2)*5] [4]);
109 (square
[9*face
+8]).corner
[2] = &(point
.xyz
[5] [(face
-2)*5] [5]);
110 (square
[9*face
+8]).corner
[3] = &(point
.xyz
[4] [(face
-2)*5] [5]);
113 for (face
=4; face
<6; face
++) /* small squares in yz plane */
115 (square
[9*face
+0]).corner
[0] = &(point
.xyz
[(face
-4)*5] [0] [0]);
116 (square
[9*face
+0]).corner
[1] = &(point
.xyz
[(face
-4)*5] [0] [1]);
117 (square
[9*face
+0]).corner
[2] = &(point
.xyz
[(face
-4)*5] [1] [1]);
118 (square
[9*face
+0]).corner
[3] = &(point
.xyz
[(face
-4)*5] [1] [0]);
120 (square
[9*face
+1]).corner
[0] = &(point
.xyz
[(face
-4)*5] [0] [2]);
121 (square
[9*face
+1]).corner
[1] = &(point
.xyz
[(face
-4)*5] [0] [3]);
122 (square
[9*face
+1]).corner
[2] = &(point
.xyz
[(face
-4)*5] [1] [3]);
123 (square
[9*face
+1]).corner
[3] = &(point
.xyz
[(face
-4)*5] [1] [2]);
125 (square
[9*face
+2]).corner
[0] = &(point
.xyz
[(face
-4)*5] [0] [4]);
126 (square
[9*face
+2]).corner
[1] = &(point
.xyz
[(face
-4)*5] [0] [5]);
127 (square
[9*face
+2]).corner
[2] = &(point
.xyz
[(face
-4)*5] [1] [5]);
128 (square
[9*face
+2]).corner
[3] = &(point
.xyz
[(face
-4)*5] [1] [4]);
130 (square
[9*face
+3]).corner
[0] = &(point
.xyz
[(face
-4)*5] [2] [0]);
131 (square
[9*face
+3]).corner
[1] = &(point
.xyz
[(face
-4)*5] [2] [1]);
132 (square
[9*face
+3]).corner
[2] = &(point
.xyz
[(face
-4)*5] [3] [1]);
133 (square
[9*face
+3]).corner
[3] = &(point
.xyz
[(face
-4)*5] [3] [0]);
135 (square
[9*face
+4]).corner
[0] = &(point
.xyz
[(face
-4)*5] [2] [2]);
136 (square
[9*face
+4]).corner
[1] = &(point
.xyz
[(face
-4)*5] [2] [3]);
137 (square
[9*face
+4]).corner
[2] = &(point
.xyz
[(face
-4)*5] [3] [3]);
138 (square
[9*face
+4]).corner
[3] = &(point
.xyz
[(face
-4)*5] [3] [2]);
140 (square
[9*face
+5]).corner
[0] = &(point
.xyz
[(face
-4)*5] [2] [4]);
141 (square
[9*face
+5]).corner
[1] = &(point
.xyz
[(face
-4)*5] [2] [5]);
142 (square
[9*face
+5]).corner
[2] = &(point
.xyz
[(face
-4)*5] [3] [5]);
143 (square
[9*face
+5]).corner
[3] = &(point
.xyz
[(face
-4)*5] [3] [4]);
145 (square
[9*face
+6]).corner
[0] = &(point
.xyz
[(face
-4)*5] [4] [0]);
146 (square
[9*face
+6]).corner
[1] = &(point
.xyz
[(face
-4)*5] [4] [1]);
147 (square
[9*face
+6]).corner
[2] = &(point
.xyz
[(face
-4)*5] [5] [1]);
148 (square
[9*face
+6]).corner
[3] = &(point
.xyz
[(face
-4)*5] [5] [0]);
150 (square
[9*face
+7]).corner
[0] = &(point
.xyz
[(face
-4)*5] [4] [2]);
151 (square
[9*face
+7]).corner
[1] = &(point
.xyz
[(face
-4)*5] [4] [3]);
152 (square
[9*face
+7]).corner
[2] = &(point
.xyz
[(face
-4)*5] [5] [3]);
153 (square
[9*face
+7]).corner
[3] = &(point
.xyz
[(face
-4)*5] [5] [2]);
155 (square
[9*face
+8]).corner
[0] = &(point
.xyz
[(face
-4)*5] [4] [4]);
156 (square
[9*face
+8]).corner
[1] = &(point
.xyz
[(face
-4)*5] [4] [5]);
157 (square
[9*face
+8]).corner
[2] = &(point
.xyz
[(face
-4)*5] [5] [5]);
158 (square
[9*face
+8]).corner
[3] = &(point
.xyz
[(face
-4)*5] [5] [4]);
162 (square
[i
]).colour
= 1+ i
/ 9;
164 for (i
=54; i
<56; i
++)
165 (square
[i
]).colour
= 0;
168 void init_points() /* generate cube centered on (0,0,0) */
175 if (i
==0 || i
==5 || j
==0 || j
==5 || k
==0 || k
==5)
180 (start
.xyz
[i
] [j
] [k
]).x
= size
* -3;
184 (start
.xyz
[i
] [j
] [k
]).x
= -size
;
188 (start
.xyz
[i
] [j
] [k
]).x
= size
;
191 (start
.xyz
[i
] [j
] [k
]).x
= size
* 3;
197 (start
.xyz
[i
] [j
] [k
]).y
= size
* -3;
201 (start
.xyz
[i
] [j
] [k
]).y
= -size
;
205 (start
.xyz
[i
] [j
] [k
]).y
= size
;
208 (start
.xyz
[i
] [j
] [k
]).y
= size
* 3;
214 (start
.xyz
[i
] [j
] [k
]).z
= size
* -3;
218 (start
.xyz
[i
] [j
] [k
]).z
= -size
;
222 (start
.xyz
[i
] [j
] [k
]).z
= size
;
225 (start
.xyz
[i
] [j
] [k
]).z
= size
* 3;