1 /* polytopes --- Shows one of the six regular polytopes rotating in 4d */
3 #if !defined( lint ) && !defined( SABER )
4 static const char sccsid[] = "@(#)polytopes.c 1.1 03/05/18 xlockmore";
8 /* Copyright (c) 2003 Carsten Steger <carsten@mirsanmir.org>. */
11 * Permission to use, copy, modify, and distribute this software and its
12 * documentation for any purpose and without fee is hereby granted,
13 * provided that the above copyright notice appear in all copies and that
14 * both that copyright notice and this permission notice appear in
15 * supporting documentation.
17 * This file is provided AS IS with no warranties of any kind. The author
18 * shall have no liability with respect to the infringement of copyrights,
19 * trade secrets or any patents by this file or any part thereof. In no
20 * event will the author be liable for any lost revenue or profits or
21 * other special, indirect and consequential damages.
24 * C. Steger - 03/08/10: Initial version
28 * This program shows one of the six regular 4D polytopes rotating in 4D.
29 * Written by Carsten Steger, inspired by H.S.M Coxeter's book "Regular
30 * Polytopes", 3rd Edition, Dover Publications, Inc., 1973, and Thomas
31 * Banchoff's book "Beyond the Third Dimension: Geometry, Computer
32 * Graphics, and Higher Dimensions", Scientific American Library, 1990.
36 #define M_PI 3.14159265358979323846
39 #define SQRT15OVER4 1.93649167310370844259 /* sqrt(15/4) */
40 #define SQRT10OVER3 1.82574185835055371152 /* sqrt(10/3) */
41 #define SQRT5OVER2 1.58113883008418966600 /* sqrt(5/2) */
42 #define SQRT5OVER6 0.91287092917527685576 /* sqrt(5/6) */
43 #define SQRT5OVER12 0.64549722436790281420 /* sqrt(5/12) */
44 #define SQRT2 1.41421356237309504880 /* sqrt(2) */
45 #define GOLDEN 1.61803398874989484820 /* (sqrt(5)+1)/2 */
46 #define GOLDENINV 0.61803398874989484820 /* (sqrt(5)-1)/2 */
47 #define SQRT2INV 0.70710678118654752440 /* sqrt(1/2) */
48 #define GOLDEN2 1.14412280563536859520 /* ((sqrt(5)+1)/2)/sqrt(2) */
49 #define GOLDENINV2 0.43701602444882107080 /* ((sqrt(5)-1)/2)/sqrt(2) */
50 #define GOLDEN22 1.85122958682191611960 /* (((sqrt(5)+1)/2)^2)/sqrt(2) */
51 #define GOLDENINV22 0.27009075673772645360 /* (((sqrt(5)-1)/2)^2)/sqrt(2) */
53 #define DISP_WIREFRAME 0
54 #define DISP_WIREFRAME_STR "0"
55 #define DISP_SURFACE 1
56 #define DISP_SURFACE_STR "1"
57 #define DISP_TRANSPARENT 2
58 #define DISP_TRANSPARENT_STR "2"
60 #define POLYTOPE_RANDOM -1
61 #define POLYTOPE_RANDOM_STR "-1"
62 #define POLYTOPE_5_CELL 0
63 #define POLYTOPE_5_CELL_STR "0"
64 #define POLYTOPE_8_CELL 1
65 #define POLYTOPE_8_CELL_STR "1"
66 #define POLYTOPE_16_CELL 2
67 #define POLYTOPE_16_CELL_STR "2"
68 #define POLYTOPE_24_CELL 3
69 #define POLYTOPE_24_CELL_STR "3"
70 #define POLYTOPE_120_CELL 4
71 #define POLYTOPE_120_CELL_STR "4"
72 #define POLYTOPE_600_CELL 5
73 #define POLYTOPE_600_CELL_STR "5"
74 #define POLYTOPE_LAST_CELL POLYTOPE_600_CELL
76 #define COLORS_SINGLE 0
77 #define COLORS_SINGLE_STR "0"
78 #define COLORS_DEPTH 1
79 #define COLORS_DEPTH_STR "1"
81 #define DISP_3D_PERSPECTIVE 0
82 #define DISP_3D_PERSPECTIVE_STR "0"
83 #define DISP_3D_ORTHOGRAPHIC 1
84 #define DISP_3D_ORTHOGRAPHIC_STR "1"
86 #define DISP_4D_PERSPECTIVE 0
87 #define DISP_4D_PERSPECTIVE_STR "0"
88 #define DISP_4D_ORTHOGRAPHIC 1
89 #define DISP_4D_ORTHOGRAPHIC_STR "1"
92 #define DALPHA_STR "1.1"
94 #define DBETA_STR "1.3"
96 #define DDELTA_STR "1.5"
98 #define DZETA_STR "1.7"
100 #define DETA_STR "1.9"
102 #define DTHETA_STR "2.1"
104 #define DEF_DISPLAY_MODE DISP_TRANSPARENT_STR
105 #define DEF_POLYTOPE POLYTOPE_RANDOM_STR
106 #define DEF_COLORS COLORS_DEPTH_STR
107 #define DEF_3D_PROJECTION DISP_3D_PERSPECTIVE_STR
108 #define DEF_4D_PROJECTION DISP_4D_PERSPECTIVE_STR
109 #define DEF_DALPHA DALPHA_STR
110 #define DEF_DBETA DBETA_STR
111 #define DEF_DDELTA DDELTA_STR
112 #define DEF_DZETA DZETA_STR
113 #define DEF_DETA DETA_STR
114 #define DEF_DTHETA DTHETA_STR
117 # define PROGCLASS "Polytopes"
118 # define HACK_INIT init_polytopes
119 # define HACK_DRAW draw_polytopes
120 # define HACK_RESHAPE reshape_polytopes
121 # define polytopes_opts xlockmore_opts
122 # define DEFAULTS "*delay: 25000 \n" \
123 "*showFPS: False \n" \
124 "*wireframe: False \n" \
125 "*displayMode: " DEF_DISPLAY_MODE " \n" \
126 "*polytope: " DEF_POLYTOPE " \n" \
127 "*colors: " DEF_COLORS " \n" \
128 "*projection3d: " DEF_3D_PROJECTION " \n" \
129 "*projection4d: " DEF_4D_PROJECTION " \n" \
130 "speedwx: " DEF_DALPHA " \n" \
131 "speedwy: " DEF_DBETA " \n" \
132 "speedwz: " DEF_DDELTA " \n" \
133 "speedxy: " DEF_DZETA " \n" \
134 "speedxz: " DEF_DETA " \n" \
135 "speedyz: " DEF_DTHETA " \n"
136 # include "xlockmore.h" /* from the xscreensaver distribution */
137 #else /* !STANDALONE */
138 # include "xlock.h" /* from the xlockmore distribution */
139 #endif /* !STANDALONE */
148 ModStruct polytopes_description =
149 {"polytopes", "init_polytopes", "draw_polytopes", "release_polytopes",
150 "draw_polytopes", "change_polytopes", NULL, &polytopes_opts,
151 25000, 1, 1, 1, 1.0, 4, "",
152 "Shows one of the six regular 4d polytopes rotating in 4d", 0, NULL};
157 static int display_mode;
159 static int color_mode;
160 static int projection_3d;
161 static int projection_4d;
162 static float speed_wx;
163 static float speed_wy;
164 static float speed_wz;
165 static float speed_xy;
166 static float speed_xz;
167 static float speed_yz;
169 /* 4D rotation angles */
170 static float alpha, beta, delta, zeta, eta, theta;
173 static const float offset4d[4] = { 0.0, 0.0, 0.0, 3.0 };
174 static const float offset3d[4] = { 0.0, 0.0, -2.0, 0.0 };
177 static XrmOptionDescRec opts[] =
179 {"-mesh", ".polytopes.displayMode", XrmoptionNoArg,
180 (caddr_t)DISP_WIREFRAME_STR },
181 {"-surface", ".polytopes.displayMode", XrmoptionNoArg,
182 (caddr_t)DISP_SURFACE_STR },
183 {"-transparent", ".polytopes.displayMode", XrmoptionNoArg,
184 (caddr_t)DISP_TRANSPARENT_STR },
185 {"-random", ".polytopes.polytope", XrmoptionNoArg,
186 (caddr_t)POLYTOPE_RANDOM_STR },
187 {"-5-cell", ".polytopes.polytope", XrmoptionNoArg,
188 (caddr_t)POLYTOPE_5_CELL_STR },
189 {"-8-cell", ".polytopes.polytope", XrmoptionNoArg,
190 (caddr_t)POLYTOPE_8_CELL_STR },
191 {"-16-cell", ".polytopes.polytope", XrmoptionNoArg,
192 (caddr_t)POLYTOPE_16_CELL_STR },
193 {"-24-cell", ".polytopes.polytope", XrmoptionNoArg,
194 (caddr_t)POLYTOPE_24_CELL_STR },
195 {"-120-cell", ".polytopes.polytope", XrmoptionNoArg,
196 (caddr_t)POLYTOPE_120_CELL_STR },
197 {"-600-cell", ".polytopes.polytope", XrmoptionNoArg,
198 (caddr_t)POLYTOPE_600_CELL_STR },
199 {"-single-color", ".polytopes.colors", XrmoptionNoArg,
200 (caddr_t)COLORS_SINGLE_STR },
201 {"-depth-colors", ".polytopes.colors", XrmoptionNoArg,
202 (caddr_t)COLORS_DEPTH_STR },
203 {"-perspective-3d", ".polytopes.projection3d", XrmoptionNoArg,
204 (caddr_t)DISP_3D_PERSPECTIVE_STR },
205 {"-orthographic-3d", ".polytopes.projection3d", XrmoptionNoArg,
206 (caddr_t)DISP_3D_ORTHOGRAPHIC_STR },
207 {"-perspective-4d", ".polytopes.projection4d", XrmoptionNoArg,
208 (caddr_t)DISP_4D_PERSPECTIVE_STR },
209 {"-orthographic-4d", ".polytopes.projection4d", XrmoptionNoArg,
210 (caddr_t)DISP_4D_ORTHOGRAPHIC_STR },
211 {"-speed-wx", ".polytopes.speedwx", XrmoptionSepArg,
213 {"-speed-wy", ".polytopes.speedwy", XrmoptionSepArg,
215 {"-speed-wz", ".polytopes.speedwz", XrmoptionSepArg,
217 {"-speed-xy", ".polytopes.speedxy", XrmoptionSepArg,
219 {"-speed-xz", ".polytopes.speedxz", XrmoptionSepArg,
221 {"-speed-yz", ".polytopes.speedyz", XrmoptionSepArg,
225 static argtype vars[] =
227 { (caddr_t *) &display_mode, "displayMode", "DisplayMode",
228 DEF_DISPLAY_MODE, t_Int },
229 { (caddr_t *) &polytope, "polytope", "Polytope",
230 DEF_POLYTOPE, t_Int },
231 { (caddr_t *) &color_mode, "colors", "Colors",
233 { (caddr_t *) &projection_3d, "projection3d", "Projection3d",
234 DEF_3D_PROJECTION, t_Int },
235 { (caddr_t *) &projection_4d, "projection4d", "Projection4d",
236 DEF_4D_PROJECTION, t_Int },
237 { (caddr_t *) &speed_wx, "speedwx", "Speedwx",
238 DEF_DALPHA, t_Float},
239 { (caddr_t *) &speed_wy, "speedwy", "Speedwy",
241 { (caddr_t *) &speed_wz, "speedwz", "Speedwz",
242 DEF_DDELTA, t_Float},
243 { (caddr_t *) &speed_xy, "speedxy", "Speedxy",
245 { (caddr_t *) &speed_xz, "speedxz", "Speedxz",
247 { (caddr_t *) &speed_yz, "speedyz", "Speedyz",
251 static OptionStruct desc[] =
253 { "-mesh", "display the polytope as a wireframe mesh" },
254 { "-surface", "display the polytope as a solid surface" },
255 { "-transparent", "display the polytope as a transparent surface" },
256 { "-solid", "display the polytope as a solid object" },
257 { "-bands", "display the polytope as see-through bands" },
258 { "-twosided", "display the polytope with two colors" },
259 { "-colorwheel", "display the polytope with a smooth color wheel" },
260 { "-perspective-3d", "project the polytope perspectively from 3d to 2d" },
261 { "-orthographic-3d", "project the polytope orthographically from 3d to 2d"},
262 { "-perspective-4d", "project the polytope perspectively from 4d to 3d" },
263 { "-orthographic-4d", "project the polytope orthographically from 4d to 3d"},
264 { "-speed-wx <arg>", "rotation speed around the wx plane" },
265 { "-speed-wy <arg>", "rotation speed around the wy plane" },
266 { "-speed-wz <arg>", "rotation speed around the wz plane" },
267 { "-speed-xy <arg>", "rotation speed around the xy plane" },
268 { "-speed-xz <arg>", "rotation speed around the xz plane" },
269 { "-speed-yz <arg>", "rotation speed around the yz plane" }
272 ModeSpecOpt polytopes_opts =
273 {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc};
278 GLXContext *glx_context;
281 static polytopesstruct *poly = (polytopesstruct *) NULL;
284 /* Vertex, edge, and face data for the six regular polytopes. All the
285 polytopes are constructed with coordinates chosen such that their 4d
286 circumsphere has a radius of 2. */
290 #define NUM_EDGE_5 10
291 #define NUM_FACE_5 10
292 #define VERT_PER_FACE_5 3
294 #define MIN_EDGE_DEPTH_5 (-0.5)
295 #define MAX_EDGE_DEPTH_5 0.75
296 #define MIN_FACE_DEPTH_5 (-0.5)
297 #define MAX_FACE_DEPTH_5 (1.0/3.0)
299 static float vert_5[NUM_VERT_5][4] = {
300 { -SQRT5OVER2, -SQRT5OVER6, -SQRT5OVER12, -0.5 },
301 { SQRT5OVER2, -SQRT5OVER6, -SQRT5OVER12, -0.5 },
302 { 0.0, SQRT10OVER3, -SQRT5OVER12, -0.5 },
303 { 0.0, 0.0, SQRT15OVER4, -0.5 },
304 { 0.0, 0.0, 0.0, 2.0 }
307 static int edge_5[NUM_EDGE_5][2] = {
308 { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 1, 2 }, { 1, 3 }, { 1, 4 },
309 { 2, 3 }, { 2, 4 }, { 3, 4 }
312 static int face_5[NUM_FACE_5][VERT_PER_FACE_5] = {
313 { 0, 1, 2 }, { 0, 1, 3 }, { 0, 1, 4 }, { 0, 2, 3 }, { 0, 2, 4 }, { 0, 3, 4 },
314 { 1, 2, 3 }, { 1, 2, 4 }, { 1, 3, 4 }, { 2, 3, 4 }
317 static float edge_color_5[NUM_EDGE_5][4];
318 static float face_color_5[NUM_FACE_5][4];
319 static float face_color_trans_5[NUM_FACE_5][4];
323 #define NUM_VERT_8 16
324 #define NUM_EDGE_8 32
325 #define NUM_FACE_8 24
326 #define VERT_PER_FACE_8 4
328 #define MIN_EDGE_DEPTH_8 (-1.0)
329 #define MAX_EDGE_DEPTH_8 1.0
330 #define MIN_FACE_DEPTH_8 (-1.0)
331 #define MAX_FACE_DEPTH_8 1.0
333 static float vert_8[NUM_VERT_8][4] = {
334 { -1.0, -1.0, -1.0, -1.0 }, { 1.0, -1.0, -1.0, -1.0 },
335 { -1.0, 1.0, -1.0, -1.0 }, { 1.0, 1.0, -1.0, -1.0 },
336 { -1.0, -1.0, 1.0, -1.0 }, { 1.0, -1.0, 1.0, -1.0 },
337 { -1.0, 1.0, 1.0, -1.0 }, { 1.0, 1.0, 1.0, -1.0 },
338 { -1.0, -1.0, -1.0, 1.0 }, { 1.0, -1.0, -1.0, 1.0 },
339 { -1.0, 1.0, -1.0, 1.0 }, { 1.0, 1.0, -1.0, 1.0 },
340 { -1.0, -1.0, 1.0, 1.0 }, { 1.0, -1.0, 1.0, 1.0 },
341 { -1.0, 1.0, 1.0, 1.0 }, { 1.0, 1.0, 1.0, 1.0 }
344 static int edge_8[NUM_EDGE_8][2] = {
345 { 0, 1 }, { 0, 2 }, { 0, 4 }, { 0, 8 }, { 1, 3 }, { 1, 5 },
346 { 1, 9 }, { 2, 3 }, { 2, 6 }, { 2, 10 }, { 3, 7 }, { 3, 11 },
347 { 4, 5 }, { 4, 6 }, { 4, 12 }, { 5, 7 }, { 5, 13 }, { 6, 7 },
348 { 6, 14 }, { 7, 15 }, { 8, 9 }, { 8, 10 }, { 8, 12 }, { 9, 11 },
349 { 9, 13 }, { 10, 11 }, { 10, 14 }, { 11, 15 }, { 12, 13 }, { 12, 14 },
350 { 13, 15 }, { 14, 15 }
353 static int face_8[NUM_FACE_8][VERT_PER_FACE_8] = {
354 { 0, 1, 3, 2 }, { 0, 1, 5, 4 }, { 0, 1, 9, 8 },
355 { 0, 2, 6, 4 }, { 0, 2, 10, 8 }, { 0, 4, 12, 8 },
356 { 1, 3, 7, 5 }, { 1, 3, 11, 9 }, { 1, 5, 13, 9 },
357 { 2, 3, 7, 6 }, { 2, 3, 11, 10 }, { 2, 6, 14, 10 },
358 { 3, 7, 15, 11 }, { 4, 5, 7, 6 }, { 4, 5, 13, 12 },
359 { 4, 6, 14, 12 }, { 5, 7, 15, 13 }, { 6, 7, 15, 14 },
360 { 8, 9, 11, 10 }, { 8, 9, 13, 12 }, { 8, 10, 14, 12 },
361 { 9, 11, 15, 13 }, { 10, 11, 15, 14 }, { 12, 13, 15, 14 }
364 static float edge_color_8[NUM_EDGE_8][4];
365 static float face_color_8[NUM_FACE_8][4];
366 static float face_color_trans_8[NUM_FACE_8][4];
369 /* 16-cell {3,3,4} */
370 #define NUM_VERT_16 8
371 #define NUM_EDGE_16 24
372 #define NUM_FACE_16 32
373 #define VERT_PER_FACE_16 3
375 #define MIN_EDGE_DEPTH_16 (-1.0)
376 #define MAX_EDGE_DEPTH_16 1.0
377 #define MIN_FACE_DEPTH_16 (-2.0/3.0)
378 #define MAX_FACE_DEPTH_16 (2.0/3.0)
380 static float vert_16[NUM_VERT_16][4] = {
381 { 0.0, 0.0, 0.0, -2.0 }, { 0.0, 0.0, -2.0, 0.0 },
382 { 0.0, -2.0, 0.0, 0.0 }, { -2.0, 0.0, 0.0, 0.0 },
383 { 2.0, 0.0, 0.0, 0.0 }, { 0.0, 2.0, 0.0, 0.0 },
384 { 0.0, 0.0, 2.0, 0.0 }, { 0.0, 0.0, 0.0, 2.0 }
387 static int edge_16[NUM_EDGE_16][2] = {
388 { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 0, 5 }, { 0, 6 }, { 1, 2 },
389 { 1, 3 }, { 1, 4 }, { 1, 5 }, { 1, 7 }, { 2, 3 }, { 2, 4 }, { 2, 6 },
390 { 2, 7 }, { 3, 5 }, { 3, 6 }, { 3, 7 }, { 4, 5 }, { 4, 6 }, { 4, 7 },
391 { 5, 6 }, { 5, 7 }, { 6, 7 }
394 static int face_16[NUM_FACE_16][VERT_PER_FACE_16] = {
395 { 0, 1, 2 }, { 0, 1, 3 }, { 0, 1, 4 }, { 0, 1, 5 }, { 0, 2, 3 }, { 0, 2, 4 },
396 { 0, 2, 6 }, { 0, 3, 5 }, { 0, 3, 6 }, { 0, 4, 5 }, { 0, 4, 6 }, { 0, 5, 6 },
397 { 1, 2, 3 }, { 1, 2, 4 }, { 1, 2, 7 }, { 1, 3, 5 }, { 1, 3, 7 }, { 1, 4, 5 },
398 { 1, 4, 7 }, { 1, 5, 7 }, { 2, 3, 6 }, { 2, 3, 7 }, { 2, 4, 6 }, { 2, 4, 7 },
399 { 2, 6, 7 }, { 3, 5, 6 }, { 3, 5, 7 }, { 3, 6, 7 }, { 4, 5, 6 }, { 4, 5, 7 },
400 { 4, 6, 7 }, { 5, 6, 7 }
403 static float edge_color_16[NUM_EDGE_16][4];
404 static float face_color_16[NUM_FACE_16][4];
405 static float face_color_trans_16[NUM_FACE_16][4];
408 /* 24-cell {3,4,3} */
409 #define NUM_VERT_24 24
410 #define NUM_EDGE_24 96
411 #define NUM_FACE_24 96
412 #define VERT_PER_FACE_24 3
414 #define MIN_EDGE_DEPTH_24 (-SQRT2)
415 #define MAX_EDGE_DEPTH_24 SQRT2
416 #define MIN_FACE_DEPTH_24 (-SQRT2)
417 #define MAX_FACE_DEPTH_24 SQRT2
419 static float vert_24[NUM_VERT_24][4] = {
420 { 0.0, 0.0, -SQRT2, -SQRT2 }, { 0.0, -SQRT2, 0.0, -SQRT2 },
421 { -SQRT2, 0.0, 0.0, -SQRT2 }, { SQRT2, 0.0, 0.0, -SQRT2 },
422 { 0.0, SQRT2, 0.0, -SQRT2 }, { 0.0, 0.0, SQRT2, -SQRT2 },
423 { 0.0, -SQRT2, -SQRT2, 0.0 }, { -SQRT2, 0.0, -SQRT2, 0.0 },
424 { SQRT2, 0.0, -SQRT2, 0.0 }, { 0.0, SQRT2, -SQRT2, 0.0 },
425 { -SQRT2, -SQRT2, 0.0, 0.0 }, { SQRT2, -SQRT2, 0.0, 0.0 },
426 { -SQRT2, SQRT2, 0.0, 0.0 }, { SQRT2, SQRT2, 0.0, 0.0 },
427 { 0.0, -SQRT2, SQRT2, 0.0 }, { -SQRT2, 0.0, SQRT2, 0.0 },
428 { SQRT2, 0.0, SQRT2, 0.0 }, { 0.0, SQRT2, SQRT2, 0.0 },
429 { 0.0, 0.0, -SQRT2, SQRT2 }, { 0.0, -SQRT2, 0.0, SQRT2 },
430 { -SQRT2, 0.0, 0.0, SQRT2 }, { SQRT2, 0.0, 0.0, SQRT2 },
431 { 0.0, SQRT2, 0.0, SQRT2 }, { 0.0, 0.0, SQRT2, SQRT2 }
434 static int edge_24[NUM_EDGE_24][2] = {
435 { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 0, 6 }, { 0, 7 },
436 { 0, 8 }, { 0, 9 }, { 1, 2 }, { 1, 3 }, { 1, 5 }, { 1, 6 },
437 { 1, 10 }, { 1, 11 }, { 1, 14 }, { 2, 4 }, { 2, 5 }, { 2, 7 },
438 { 2, 10 }, { 2, 12 }, { 2, 15 }, { 3, 4 }, { 3, 5 }, { 3, 8 },
439 { 3, 11 }, { 3, 13 }, { 3, 16 }, { 4, 5 }, { 4, 9 }, { 4, 12 },
440 { 4, 13 }, { 4, 17 }, { 5, 14 }, { 5, 15 }, { 5, 16 }, { 5, 17 },
441 { 6, 7 }, { 6, 8 }, { 6, 10 }, { 6, 11 }, { 6, 18 }, { 6, 19 },
442 { 7, 9 }, { 7, 10 }, { 7, 12 }, { 7, 18 }, { 7, 20 }, { 8, 9 },
443 { 8, 11 }, { 8, 13 }, { 8, 18 }, { 8, 21 }, { 9, 12 }, { 9, 13 },
444 { 9, 18 }, { 9, 22 }, { 10, 14 }, { 10, 15 }, { 10, 19 }, { 10, 20 },
445 { 11, 14 }, { 11, 16 }, { 11, 19 }, { 11, 21 }, { 12, 15 }, { 12, 17 },
446 { 12, 20 }, { 12, 22 }, { 13, 16 }, { 13, 17 }, { 13, 21 }, { 13, 22 },
447 { 14, 15 }, { 14, 16 }, { 14, 19 }, { 14, 23 }, { 15, 17 }, { 15, 20 },
448 { 15, 23 }, { 16, 17 }, { 16, 21 }, { 16, 23 }, { 17, 22 }, { 17, 23 },
449 { 18, 19 }, { 18, 20 }, { 18, 21 }, { 18, 22 }, { 19, 20 }, { 19, 21 },
450 { 19, 23 }, { 20, 22 }, { 20, 23 }, { 21, 22 }, { 21, 23 }, { 22, 23 }
453 static int face_24[NUM_FACE_24][VERT_PER_FACE_24] = {
454 { 0, 1, 2 }, { 0, 1, 3 }, { 0, 1, 6 }, { 0, 2, 4 },
455 { 0, 2, 7 }, { 0, 3, 4 }, { 0, 3, 8 }, { 0, 4, 9 },
456 { 0, 6, 7 }, { 0, 6, 8 }, { 0, 7, 9 }, { 0, 8, 9 },
457 { 1, 2, 5 }, { 1, 2, 10 }, { 1, 3, 5 }, { 1, 3, 11 },
458 { 1, 5, 14 }, { 1, 6, 10 }, { 1, 6, 11 }, { 1, 10, 14 },
459 { 1, 11, 14 }, { 2, 4, 5 }, { 2, 4, 12 }, { 2, 5, 15 },
460 { 2, 7, 10 }, { 2, 7, 12 }, { 2, 10, 15 }, { 2, 12, 15 },
461 { 3, 4, 5 }, { 3, 4, 13 }, { 3, 5, 16 }, { 3, 8, 11 },
462 { 3, 8, 13 }, { 3, 11, 16 }, { 3, 13, 16 }, { 4, 5, 17 },
463 { 4, 9, 12 }, { 4, 9, 13 }, { 4, 12, 17 }, { 4, 13, 17 },
464 { 5, 14, 15 }, { 5, 14, 16 }, { 5, 15, 17 }, { 5, 16, 17 },
465 { 6, 7, 10 }, { 6, 7, 18 }, { 6, 8, 11 }, { 6, 8, 18 },
466 { 6, 10, 19 }, { 6, 11, 19 }, { 6, 18, 19 }, { 7, 9, 12 },
467 { 7, 9, 18 }, { 7, 10, 20 }, { 7, 12, 20 }, { 7, 18, 20 },
468 { 8, 9, 13 }, { 8, 9, 18 }, { 8, 11, 21 }, { 8, 13, 21 },
469 { 8, 18, 21 }, { 9, 12, 22 }, { 9, 13, 22 }, { 9, 18, 22 },
470 { 10, 14, 15 }, { 10, 14, 19 }, { 10, 15, 20 }, { 10, 19, 20 },
471 { 11, 14, 16 }, { 11, 14, 19 }, { 11, 16, 21 }, { 11, 19, 21 },
472 { 12, 15, 17 }, { 12, 15, 20 }, { 12, 17, 22 }, { 12, 20, 22 },
473 { 13, 16, 17 }, { 13, 16, 21 }, { 13, 17, 22 }, { 13, 21, 22 },
474 { 14, 15, 23 }, { 14, 16, 23 }, { 14, 19, 23 }, { 15, 17, 23 },
475 { 15, 20, 23 }, { 16, 17, 23 }, { 16, 21, 23 }, { 17, 22, 23 },
476 { 18, 19, 20 }, { 18, 19, 21 }, { 18, 20, 22 }, { 18, 21, 22 },
477 { 19, 20, 23 }, { 19, 21, 23 }, { 20, 22, 23 }, { 21, 22, 23 }
480 static float edge_color_24[NUM_EDGE_24][4];
481 static float face_color_24[NUM_FACE_24][4];
482 static float face_color_trans_24[NUM_FACE_24][4];
485 /* 120-cell {5,3,3} */
486 #define NUM_VERT_120 600
487 #define NUM_EDGE_120 1200
488 #define NUM_FACE_120 720
489 #define VERT_PER_FACE_120 5
491 #define MIN_EDGE_DEPTH_120 (-GOLDEN22)
492 #define MAX_EDGE_DEPTH_120 GOLDEN22
493 #define MIN_FACE_DEPTH_120 (-GOLDEN22)
494 #define MAX_FACE_DEPTH_120 GOLDEN22
496 static float vert_120[NUM_VERT_120][4] = {
497 { -GOLDENINV22, 0.0, -SQRT2INV, -GOLDEN22 },
498 { GOLDENINV22, 0.0, -SQRT2INV, -GOLDEN22 },
499 { -GOLDENINV2, -GOLDENINV2, -GOLDENINV2, -GOLDEN22 },
500 { GOLDENINV2, -GOLDENINV2, -GOLDENINV2, -GOLDEN22 },
501 { -GOLDENINV2, GOLDENINV2, -GOLDENINV2, -GOLDEN22 },
502 { GOLDENINV2, GOLDENINV2, -GOLDENINV2, -GOLDEN22 },
503 { 0.0, -SQRT2INV, -GOLDENINV22, -GOLDEN22 },
504 { 0.0, SQRT2INV, -GOLDENINV22, -GOLDEN22 },
505 { -SQRT2INV, -GOLDENINV22, 0.0, -GOLDEN22 },
506 { SQRT2INV, -GOLDENINV22, 0.0, -GOLDEN22 },
507 { -SQRT2INV, GOLDENINV22, 0.0, -GOLDEN22 },
508 { SQRT2INV, GOLDENINV22, 0.0, -GOLDEN22 },
509 { 0.0, -SQRT2INV, GOLDENINV22, -GOLDEN22 },
510 { 0.0, SQRT2INV, GOLDENINV22, -GOLDEN22 },
511 { -GOLDENINV2, -GOLDENINV2, GOLDENINV2, -GOLDEN22 },
512 { GOLDENINV2, -GOLDENINV2, GOLDENINV2, -GOLDEN22 },
513 { -GOLDENINV2, GOLDENINV2, GOLDENINV2, -GOLDEN22 },
514 { GOLDENINV2, GOLDENINV2, GOLDENINV2, -GOLDEN22 },
515 { -GOLDENINV22, 0.0, SQRT2INV, -GOLDEN22 },
516 { GOLDENINV22, 0.0, SQRT2INV, -GOLDEN22 },
517 { -GOLDENINV2, 0.0, -GOLDEN2, -SQRT5OVER2 },
518 { GOLDENINV2, 0.0, -GOLDEN2, -SQRT5OVER2 },
519 { -SQRT2INV, -SQRT2INV, -SQRT2INV, -SQRT5OVER2 },
520 { SQRT2INV, -SQRT2INV, -SQRT2INV, -SQRT5OVER2 },
521 { -SQRT2INV, SQRT2INV, -SQRT2INV, -SQRT5OVER2 },
522 { SQRT2INV, SQRT2INV, -SQRT2INV, -SQRT5OVER2 },
523 { 0.0, -GOLDEN2, -GOLDENINV2, -SQRT5OVER2 },
524 { 0.0, GOLDEN2, -GOLDENINV2, -SQRT5OVER2 },
525 { -GOLDEN2, -GOLDENINV2, 0.0, -SQRT5OVER2 },
526 { GOLDEN2, -GOLDENINV2, 0.0, -SQRT5OVER2 },
527 { -GOLDEN2, GOLDENINV2, 0.0, -SQRT5OVER2 },
528 { GOLDEN2, GOLDENINV2, 0.0, -SQRT5OVER2 },
529 { 0.0, -GOLDEN2, GOLDENINV2, -SQRT5OVER2 },
530 { 0.0, GOLDEN2, GOLDENINV2, -SQRT5OVER2 },
531 { -SQRT2INV, -SQRT2INV, SQRT2INV, -SQRT5OVER2 },
532 { SQRT2INV, -SQRT2INV, SQRT2INV, -SQRT5OVER2 },
533 { -SQRT2INV, SQRT2INV, SQRT2INV, -SQRT5OVER2 },
534 { SQRT2INV, SQRT2INV, SQRT2INV, -SQRT5OVER2 },
535 { -GOLDENINV2, 0.0, GOLDEN2, -SQRT5OVER2 },
536 { GOLDENINV2, 0.0, GOLDEN2, -SQRT5OVER2 },
537 { 0.0, 0.0, -SQRT2, -SQRT2 },
538 { -SQRT2INV, -GOLDENINV2, -GOLDEN2, -SQRT2 },
539 { SQRT2INV, -GOLDENINV2, -GOLDEN2, -SQRT2 },
540 { -SQRT2INV, GOLDENINV2, -GOLDEN2, -SQRT2 },
541 { SQRT2INV, GOLDENINV2, -GOLDEN2, -SQRT2 },
542 { -GOLDENINV2, -GOLDEN2, -SQRT2INV, -SQRT2 },
543 { GOLDENINV2, -GOLDEN2, -SQRT2INV, -SQRT2 },
544 { -GOLDENINV2, GOLDEN2, -SQRT2INV, -SQRT2 },
545 { GOLDENINV2, GOLDEN2, -SQRT2INV, -SQRT2 },
546 { -GOLDEN2, -SQRT2INV, -GOLDENINV2, -SQRT2 },
547 { GOLDEN2, -SQRT2INV, -GOLDENINV2, -SQRT2 },
548 { -GOLDEN2, SQRT2INV, -GOLDENINV2, -SQRT2 },
549 { GOLDEN2, SQRT2INV, -GOLDENINV2, -SQRT2 },
550 { 0.0, -SQRT2, 0.0, -SQRT2 },
551 { -SQRT2, 0.0, 0.0, -SQRT2 },
552 { SQRT2, 0.0, 0.0, -SQRT2 },
553 { 0.0, SQRT2, 0.0, -SQRT2 },
554 { -GOLDEN2, -SQRT2INV, GOLDENINV2, -SQRT2 },
555 { GOLDEN2, -SQRT2INV, GOLDENINV2, -SQRT2 },
556 { -GOLDEN2, SQRT2INV, GOLDENINV2, -SQRT2 },
557 { GOLDEN2, SQRT2INV, GOLDENINV2, -SQRT2 },
558 { -GOLDENINV2, -GOLDEN2, SQRT2INV, -SQRT2 },
559 { GOLDENINV2, -GOLDEN2, SQRT2INV, -SQRT2 },
560 { -GOLDENINV2, GOLDEN2, SQRT2INV, -SQRT2 },
561 { GOLDENINV2, GOLDEN2, SQRT2INV, -SQRT2 },
562 { -SQRT2INV, -GOLDENINV2, GOLDEN2, -SQRT2 },
563 { SQRT2INV, -GOLDENINV2, GOLDEN2, -SQRT2 },
564 { -SQRT2INV, GOLDENINV2, GOLDEN2, -SQRT2 },
565 { SQRT2INV, GOLDENINV2, GOLDEN2, -SQRT2 },
566 { 0.0, 0.0, SQRT2, -SQRT2 },
567 { 0.0, -GOLDENINV2, -SQRT5OVER2, -GOLDEN2 },
568 { 0.0, GOLDENINV2, -SQRT5OVER2, -GOLDEN2 },
569 { -GOLDENINV2, -SQRT2INV, -SQRT2, -GOLDEN2 },
570 { GOLDENINV2, -SQRT2INV, -SQRT2, -GOLDEN2 },
571 { -GOLDENINV2, SQRT2INV, -SQRT2, -GOLDEN2 },
572 { GOLDENINV2, SQRT2INV, -SQRT2, -GOLDEN2 },
573 { -GOLDENINV22, -GOLDEN2, -GOLDEN2, -GOLDEN2 },
574 { GOLDENINV22, -GOLDEN2, -GOLDEN2, -GOLDEN2 },
575 { -GOLDEN2, -GOLDENINV22, -GOLDEN2, -GOLDEN2 },
576 { GOLDEN2, -GOLDENINV22, -GOLDEN2, -GOLDEN2 },
577 { -GOLDEN2, GOLDENINV22, -GOLDEN2, -GOLDEN2 },
578 { GOLDEN2, GOLDENINV22, -GOLDEN2, -GOLDEN2 },
579 { -GOLDENINV22, GOLDEN2, -GOLDEN2, -GOLDEN2 },
580 { GOLDENINV22, GOLDEN2, -GOLDEN2, -GOLDEN2 },
581 { -SQRT2, -GOLDENINV2, -SQRT2INV, -GOLDEN2 },
582 { SQRT2, -GOLDENINV2, -SQRT2INV, -GOLDEN2 },
583 { -SQRT2, GOLDENINV2, -SQRT2INV, -GOLDEN2 },
584 { SQRT2, GOLDENINV2, -SQRT2INV, -GOLDEN2 },
585 { -SQRT2INV, -SQRT2, -GOLDENINV2, -GOLDEN2 },
586 { SQRT2INV, -SQRT2, -GOLDENINV2, -GOLDEN2 },
587 { -SQRT5OVER2, 0.0, -GOLDENINV2, -GOLDEN2 },
588 { SQRT5OVER2, 0.0, -GOLDENINV2, -GOLDEN2 },
589 { -SQRT2INV, SQRT2, -GOLDENINV2, -GOLDEN2 },
590 { SQRT2INV, SQRT2, -GOLDENINV2, -GOLDEN2 },
591 { -GOLDEN2, -GOLDEN2, -GOLDENINV22, -GOLDEN2 },
592 { GOLDEN2, -GOLDEN2, -GOLDENINV22, -GOLDEN2 },
593 { -GOLDEN2, GOLDEN2, -GOLDENINV22, -GOLDEN2 },
594 { GOLDEN2, GOLDEN2, -GOLDENINV22, -GOLDEN2 },
595 { -GOLDENINV2, -SQRT5OVER2, 0.0, -GOLDEN2 },
596 { GOLDENINV2, -SQRT5OVER2, 0.0, -GOLDEN2 },
597 { -GOLDENINV2, SQRT5OVER2, 0.0, -GOLDEN2 },
598 { GOLDENINV2, SQRT5OVER2, 0.0, -GOLDEN2 },
599 { -GOLDEN2, -GOLDEN2, GOLDENINV22, -GOLDEN2 },
600 { GOLDEN2, -GOLDEN2, GOLDENINV22, -GOLDEN2 },
601 { -GOLDEN2, GOLDEN2, GOLDENINV22, -GOLDEN2 },
602 { GOLDEN2, GOLDEN2, GOLDENINV22, -GOLDEN2 },
603 { -SQRT2INV, -SQRT2, GOLDENINV2, -GOLDEN2 },
604 { SQRT2INV, -SQRT2, GOLDENINV2, -GOLDEN2 },
605 { -SQRT5OVER2, 0.0, GOLDENINV2, -GOLDEN2 },
606 { SQRT5OVER2, 0.0, GOLDENINV2, -GOLDEN2 },
607 { -SQRT2INV, SQRT2, GOLDENINV2, -GOLDEN2 },
608 { SQRT2INV, SQRT2, GOLDENINV2, -GOLDEN2 },
609 { -SQRT2, -GOLDENINV2, SQRT2INV, -GOLDEN2 },
610 { SQRT2, -GOLDENINV2, SQRT2INV, -GOLDEN2 },
611 { -SQRT2, GOLDENINV2, SQRT2INV, -GOLDEN2 },
612 { SQRT2, GOLDENINV2, SQRT2INV, -GOLDEN2 },
613 { -GOLDENINV22, -GOLDEN2, GOLDEN2, -GOLDEN2 },
614 { GOLDENINV22, -GOLDEN2, GOLDEN2, -GOLDEN2 },
615 { -GOLDEN2, -GOLDENINV22, GOLDEN2, -GOLDEN2 },
616 { GOLDEN2, -GOLDENINV22, GOLDEN2, -GOLDEN2 },
617 { -GOLDEN2, GOLDENINV22, GOLDEN2, -GOLDEN2 },
618 { GOLDEN2, GOLDENINV22, GOLDEN2, -GOLDEN2 },
619 { -GOLDENINV22, GOLDEN2, GOLDEN2, -GOLDEN2 },
620 { GOLDENINV22, GOLDEN2, GOLDEN2, -GOLDEN2 },
621 { -GOLDENINV2, -SQRT2INV, SQRT2, -GOLDEN2 },
622 { GOLDENINV2, -SQRT2INV, SQRT2, -GOLDEN2 },
623 { -GOLDENINV2, SQRT2INV, SQRT2, -GOLDEN2 },
624 { GOLDENINV2, SQRT2INV, SQRT2, -GOLDEN2 },
625 { 0.0, -GOLDENINV2, SQRT5OVER2, -GOLDEN2 },
626 { 0.0, GOLDENINV2, SQRT5OVER2, -GOLDEN2 },
627 { 0.0, -GOLDENINV22, -GOLDEN22, -SQRT2INV },
628 { 0.0, GOLDENINV22, -GOLDEN22, -SQRT2INV },
629 { -SQRT2INV, -SQRT2INV, -SQRT5OVER2, -SQRT2INV },
630 { SQRT2INV, -SQRT2INV, -SQRT5OVER2, -SQRT2INV },
631 { -SQRT2INV, SQRT2INV, -SQRT5OVER2, -SQRT2INV },
632 { SQRT2INV, SQRT2INV, -SQRT5OVER2, -SQRT2INV },
633 { -GOLDEN2, -GOLDENINV2, -SQRT2, -SQRT2INV },
634 { GOLDEN2, -GOLDENINV2, -SQRT2, -SQRT2INV },
635 { -GOLDEN2, GOLDENINV2, -SQRT2, -SQRT2INV },
636 { GOLDEN2, GOLDENINV2, -SQRT2, -SQRT2INV },
637 { -GOLDENINV2, -SQRT2, -GOLDEN2, -SQRT2INV },
638 { GOLDENINV2, -SQRT2, -GOLDEN2, -SQRT2INV },
639 { -GOLDENINV2, SQRT2, -GOLDEN2, -SQRT2INV },
640 { GOLDENINV2, SQRT2, -GOLDEN2, -SQRT2INV },
641 { -SQRT2INV, -SQRT5OVER2, -SQRT2INV, -SQRT2INV },
642 { SQRT2INV, -SQRT5OVER2, -SQRT2INV, -SQRT2INV },
643 { -SQRT5OVER2, -SQRT2INV, -SQRT2INV, -SQRT2INV },
644 { SQRT5OVER2, -SQRT2INV, -SQRT2INV, -SQRT2INV },
645 { -SQRT5OVER2, SQRT2INV, -SQRT2INV, -SQRT2INV },
646 { SQRT5OVER2, SQRT2INV, -SQRT2INV, -SQRT2INV },
647 { -SQRT2INV, SQRT5OVER2, -SQRT2INV, -SQRT2INV },
648 { SQRT2INV, SQRT5OVER2, -SQRT2INV, -SQRT2INV },
649 { -SQRT2, -GOLDEN2, -GOLDENINV2, -SQRT2INV },
650 { SQRT2, -GOLDEN2, -GOLDENINV2, -SQRT2INV },
651 { -SQRT2, GOLDEN2, -GOLDENINV2, -SQRT2INV },
652 { SQRT2, GOLDEN2, -GOLDENINV2, -SQRT2INV },
653 { -GOLDEN22, 0.0, -GOLDENINV22, -SQRT2INV },
654 { GOLDEN22, 0.0, -GOLDENINV22, -SQRT2INV },
655 { -GOLDENINV22, -GOLDEN22, 0.0, -SQRT2INV },
656 { GOLDENINV22, -GOLDEN22, 0.0, -SQRT2INV },
657 { -GOLDENINV22, GOLDEN22, 0.0, -SQRT2INV },
658 { GOLDENINV22, GOLDEN22, 0.0, -SQRT2INV },
659 { -GOLDEN22, 0.0, GOLDENINV22, -SQRT2INV },
660 { GOLDEN22, 0.0, GOLDENINV22, -SQRT2INV },
661 { -SQRT2, -GOLDEN2, GOLDENINV2, -SQRT2INV },
662 { SQRT2, -GOLDEN2, GOLDENINV2, -SQRT2INV },
663 { -SQRT2, GOLDEN2, GOLDENINV2, -SQRT2INV },
664 { SQRT2, GOLDEN2, GOLDENINV2, -SQRT2INV },
665 { -SQRT2INV, -SQRT5OVER2, SQRT2INV, -SQRT2INV },
666 { SQRT2INV, -SQRT5OVER2, SQRT2INV, -SQRT2INV },
667 { -SQRT5OVER2, -SQRT2INV, SQRT2INV, -SQRT2INV },
668 { SQRT5OVER2, -SQRT2INV, SQRT2INV, -SQRT2INV },
669 { -SQRT5OVER2, SQRT2INV, SQRT2INV, -SQRT2INV },
670 { SQRT5OVER2, SQRT2INV, SQRT2INV, -SQRT2INV },
671 { -SQRT2INV, SQRT5OVER2, SQRT2INV, -SQRT2INV },
672 { SQRT2INV, SQRT5OVER2, SQRT2INV, -SQRT2INV },
673 { -GOLDENINV2, -SQRT2, GOLDEN2, -SQRT2INV },
674 { GOLDENINV2, -SQRT2, GOLDEN2, -SQRT2INV },
675 { -GOLDENINV2, SQRT2, GOLDEN2, -SQRT2INV },
676 { GOLDENINV2, SQRT2, GOLDEN2, -SQRT2INV },
677 { -GOLDEN2, -GOLDENINV2, SQRT2, -SQRT2INV },
678 { GOLDEN2, -GOLDENINV2, SQRT2, -SQRT2INV },
679 { -GOLDEN2, GOLDENINV2, SQRT2, -SQRT2INV },
680 { GOLDEN2, GOLDENINV2, SQRT2, -SQRT2INV },
681 { -SQRT2INV, -SQRT2INV, SQRT5OVER2, -SQRT2INV },
682 { SQRT2INV, -SQRT2INV, SQRT5OVER2, -SQRT2INV },
683 { -SQRT2INV, SQRT2INV, SQRT5OVER2, -SQRT2INV },
684 { SQRT2INV, SQRT2INV, SQRT5OVER2, -SQRT2INV },
685 { 0.0, -GOLDENINV22, GOLDEN22, -SQRT2INV },
686 { 0.0, GOLDENINV22, GOLDEN22, -SQRT2INV },
687 { -GOLDENINV2, -GOLDENINV2, -GOLDEN22, -GOLDENINV2 },
688 { GOLDENINV2, -GOLDENINV2, -GOLDEN22, -GOLDENINV2 },
689 { -GOLDENINV2, GOLDENINV2, -GOLDEN22, -GOLDENINV2 },
690 { GOLDENINV2, GOLDENINV2, -GOLDEN22, -GOLDENINV2 },
691 { -GOLDEN2, 0.0, -SQRT5OVER2, -GOLDENINV2 },
692 { GOLDEN2, 0.0, -SQRT5OVER2, -GOLDENINV2 },
693 { -SQRT2INV, -GOLDEN2, -SQRT2, -GOLDENINV2 },
694 { SQRT2INV, -GOLDEN2, -SQRT2, -GOLDENINV2 },
695 { -SQRT2INV, GOLDEN2, -SQRT2, -GOLDENINV2 },
696 { SQRT2INV, GOLDEN2, -SQRT2, -GOLDENINV2 },
697 { 0.0, -SQRT5OVER2, -GOLDEN2, -GOLDENINV2 },
698 { -SQRT2, -SQRT2INV, -GOLDEN2, -GOLDENINV2 },
699 { SQRT2, -SQRT2INV, -GOLDEN2, -GOLDENINV2 },
700 { -SQRT2, SQRT2INV, -GOLDEN2, -GOLDENINV2 },
701 { SQRT2, SQRT2INV, -GOLDEN2, -GOLDENINV2 },
702 { 0.0, SQRT5OVER2, -GOLDEN2, -GOLDENINV2 },
703 { -GOLDEN2, -SQRT2, -SQRT2INV, -GOLDENINV2 },
704 { GOLDEN2, -SQRT2, -SQRT2INV, -GOLDENINV2 },
705 { -GOLDEN2, SQRT2, -SQRT2INV, -GOLDENINV2 },
706 { GOLDEN2, SQRT2, -SQRT2INV, -GOLDENINV2 },
707 { -GOLDENINV2, -GOLDEN22, -GOLDENINV2, -GOLDENINV2 },
708 { GOLDENINV2, -GOLDEN22, -GOLDENINV2, -GOLDENINV2 },
709 { -GOLDEN22, -GOLDENINV2, -GOLDENINV2, -GOLDENINV2 },
710 { GOLDEN22, -GOLDENINV2, -GOLDENINV2, -GOLDENINV2 },
711 { -GOLDEN22, GOLDENINV2, -GOLDENINV2, -GOLDENINV2 },
712 { GOLDEN22, GOLDENINV2, -GOLDENINV2, -GOLDENINV2 },
713 { -GOLDENINV2, GOLDEN22, -GOLDENINV2, -GOLDENINV2 },
714 { GOLDENINV2, GOLDEN22, -GOLDENINV2, -GOLDENINV2 },
715 { -SQRT5OVER2, -GOLDEN2, 0.0, -GOLDENINV2 },
716 { SQRT5OVER2, -GOLDEN2, 0.0, -GOLDENINV2 },
717 { -SQRT5OVER2, GOLDEN2, 0.0, -GOLDENINV2 },
718 { SQRT5OVER2, GOLDEN2, 0.0, -GOLDENINV2 },
719 { -GOLDENINV2, -GOLDEN22, GOLDENINV2, -GOLDENINV2 },
720 { GOLDENINV2, -GOLDEN22, GOLDENINV2, -GOLDENINV2 },
721 { -GOLDEN22, -GOLDENINV2, GOLDENINV2, -GOLDENINV2 },
722 { GOLDEN22, -GOLDENINV2, GOLDENINV2, -GOLDENINV2 },
723 { -GOLDEN22, GOLDENINV2, GOLDENINV2, -GOLDENINV2 },
724 { GOLDEN22, GOLDENINV2, GOLDENINV2, -GOLDENINV2 },
725 { -GOLDENINV2, GOLDEN22, GOLDENINV2, -GOLDENINV2 },
726 { GOLDENINV2, GOLDEN22, GOLDENINV2, -GOLDENINV2 },
727 { -GOLDEN2, -SQRT2, SQRT2INV, -GOLDENINV2 },
728 { GOLDEN2, -SQRT2, SQRT2INV, -GOLDENINV2 },
729 { -GOLDEN2, SQRT2, SQRT2INV, -GOLDENINV2 },
730 { GOLDEN2, SQRT2, SQRT2INV, -GOLDENINV2 },
731 { 0.0, -SQRT5OVER2, GOLDEN2, -GOLDENINV2 },
732 { -SQRT2, -SQRT2INV, GOLDEN2, -GOLDENINV2 },
733 { SQRT2, -SQRT2INV, GOLDEN2, -GOLDENINV2 },
734 { -SQRT2, SQRT2INV, GOLDEN2, -GOLDENINV2 },
735 { SQRT2, SQRT2INV, GOLDEN2, -GOLDENINV2 },
736 { 0.0, SQRT5OVER2, GOLDEN2, -GOLDENINV2 },
737 { -SQRT2INV, -GOLDEN2, SQRT2, -GOLDENINV2 },
738 { SQRT2INV, -GOLDEN2, SQRT2, -GOLDENINV2 },
739 { -SQRT2INV, GOLDEN2, SQRT2, -GOLDENINV2 },
740 { SQRT2INV, GOLDEN2, SQRT2, -GOLDENINV2 },
741 { -GOLDEN2, 0.0, SQRT5OVER2, -GOLDENINV2 },
742 { GOLDEN2, 0.0, SQRT5OVER2, -GOLDENINV2 },
743 { -GOLDENINV2, -GOLDENINV2, GOLDEN22, -GOLDENINV2 },
744 { GOLDENINV2, -GOLDENINV2, GOLDEN22, -GOLDENINV2 },
745 { -GOLDENINV2, GOLDENINV2, GOLDEN22, -GOLDENINV2 },
746 { GOLDENINV2, GOLDENINV2, GOLDEN22, -GOLDENINV2 },
747 { -SQRT2INV, 0.0, -GOLDEN22, -GOLDENINV22 },
748 { SQRT2INV, 0.0, -GOLDEN22, -GOLDENINV22 },
749 { -GOLDEN2, -GOLDEN2, -GOLDEN2, -GOLDENINV22 },
750 { GOLDEN2, -GOLDEN2, -GOLDEN2, -GOLDENINV22 },
751 { -GOLDEN2, GOLDEN2, -GOLDEN2, -GOLDENINV22 },
752 { GOLDEN2, GOLDEN2, -GOLDEN2, -GOLDENINV22 },
753 { 0.0, -GOLDEN22, -SQRT2INV, -GOLDENINV22 },
754 { 0.0, GOLDEN22, -SQRT2INV, -GOLDENINV22 },
755 { -GOLDEN22, -SQRT2INV, 0.0, -GOLDENINV22 },
756 { GOLDEN22, -SQRT2INV, 0.0, -GOLDENINV22 },
757 { -GOLDEN22, SQRT2INV, 0.0, -GOLDENINV22 },
758 { GOLDEN22, SQRT2INV, 0.0, -GOLDENINV22 },
759 { 0.0, -GOLDEN22, SQRT2INV, -GOLDENINV22 },
760 { 0.0, GOLDEN22, SQRT2INV, -GOLDENINV22 },
761 { -GOLDEN2, -GOLDEN2, GOLDEN2, -GOLDENINV22 },
762 { GOLDEN2, -GOLDEN2, GOLDEN2, -GOLDENINV22 },
763 { -GOLDEN2, GOLDEN2, GOLDEN2, -GOLDENINV22 },
764 { GOLDEN2, GOLDEN2, GOLDEN2, -GOLDENINV22 },
765 { -SQRT2INV, 0.0, GOLDEN22, -GOLDENINV22 },
766 { SQRT2INV, 0.0, GOLDEN22, -GOLDENINV22 },
767 { -GOLDENINV22, -SQRT2INV, -GOLDEN22, 0.0 },
768 { GOLDENINV22, -SQRT2INV, -GOLDEN22, 0.0 },
769 { -GOLDENINV22, SQRT2INV, -GOLDEN22, 0.0 },
770 { GOLDENINV22, SQRT2INV, -GOLDEN22, 0.0 },
771 { -GOLDENINV2, -GOLDEN2, -SQRT5OVER2, 0.0 },
772 { GOLDENINV2, -GOLDEN2, -SQRT5OVER2, 0.0 },
773 { -GOLDENINV2, GOLDEN2, -SQRT5OVER2, 0.0 },
774 { GOLDENINV2, GOLDEN2, -SQRT5OVER2, 0.0 },
775 { 0.0, -SQRT2, -SQRT2, 0.0 },
776 { -SQRT2, 0.0, -SQRT2, 0.0 },
777 { SQRT2, 0.0, -SQRT2, 0.0 },
778 { 0.0, SQRT2, -SQRT2, 0.0 },
779 { -SQRT5OVER2, -GOLDENINV2, -GOLDEN2, 0.0 },
780 { SQRT5OVER2, -GOLDENINV2, -GOLDEN2, 0.0 },
781 { -SQRT5OVER2, GOLDENINV2, -GOLDEN2, 0.0 },
782 { SQRT5OVER2, GOLDENINV2, -GOLDEN2, 0.0 },
783 { -GOLDEN22, -GOLDENINV22, -SQRT2INV, 0.0 },
784 { GOLDEN22, -GOLDENINV22, -SQRT2INV, 0.0 },
785 { -GOLDEN22, GOLDENINV22, -SQRT2INV, 0.0 },
786 { GOLDEN22, GOLDENINV22, -SQRT2INV, 0.0 },
787 { -GOLDEN2, -SQRT5OVER2, -GOLDENINV2, 0.0 },
788 { GOLDEN2, -SQRT5OVER2, -GOLDENINV2, 0.0 },
789 { -GOLDEN2, SQRT5OVER2, -GOLDENINV2, 0.0 },
790 { GOLDEN2, SQRT5OVER2, -GOLDENINV2, 0.0 },
791 { -SQRT2INV, -GOLDEN22, -GOLDENINV22, 0.0 },
792 { SQRT2INV, -GOLDEN22, -GOLDENINV22, 0.0 },
793 { -SQRT2INV, GOLDEN22, -GOLDENINV22, 0.0 },
794 { SQRT2INV, GOLDEN22, -GOLDENINV22, 0.0 },
795 { -SQRT2, -SQRT2, 0.0, 0.0 },
796 { SQRT2, -SQRT2, 0.0, 0.0 },
797 { -SQRT2, SQRT2, 0.0, 0.0 },
798 { SQRT2, SQRT2, 0.0, 0.0 },
799 { -SQRT2INV, -GOLDEN22, GOLDENINV22, 0.0 },
800 { SQRT2INV, -GOLDEN22, GOLDENINV22, 0.0 },
801 { -SQRT2INV, GOLDEN22, GOLDENINV22, 0.0 },
802 { SQRT2INV, GOLDEN22, GOLDENINV22, 0.0 },
803 { -GOLDEN2, -SQRT5OVER2, GOLDENINV2, 0.0 },
804 { GOLDEN2, -SQRT5OVER2, GOLDENINV2, 0.0 },
805 { -GOLDEN2, SQRT5OVER2, GOLDENINV2, 0.0 },
806 { GOLDEN2, SQRT5OVER2, GOLDENINV2, 0.0 },
807 { -GOLDEN22, -GOLDENINV22, SQRT2INV, 0.0 },
808 { GOLDEN22, -GOLDENINV22, SQRT2INV, 0.0 },
809 { -GOLDEN22, GOLDENINV22, SQRT2INV, 0.0 },
810 { GOLDEN22, GOLDENINV22, SQRT2INV, 0.0 },
811 { -SQRT5OVER2, -GOLDENINV2, GOLDEN2, 0.0 },
812 { SQRT5OVER2, -GOLDENINV2, GOLDEN2, 0.0 },
813 { -SQRT5OVER2, GOLDENINV2, GOLDEN2, 0.0 },
814 { SQRT5OVER2, GOLDENINV2, GOLDEN2, 0.0 },
815 { 0.0, -SQRT2, SQRT2, 0.0 },
816 { -SQRT2, 0.0, SQRT2, 0.0 },
817 { SQRT2, 0.0, SQRT2, 0.0 },
818 { 0.0, SQRT2, SQRT2, 0.0 },
819 { -GOLDENINV2, -GOLDEN2, SQRT5OVER2, 0.0 },
820 { GOLDENINV2, -GOLDEN2, SQRT5OVER2, 0.0 },
821 { -GOLDENINV2, GOLDEN2, SQRT5OVER2, 0.0 },
822 { GOLDENINV2, GOLDEN2, SQRT5OVER2, 0.0 },
823 { -GOLDENINV22, -SQRT2INV, GOLDEN22, 0.0 },
824 { GOLDENINV22, -SQRT2INV, GOLDEN22, 0.0 },
825 { -GOLDENINV22, SQRT2INV, GOLDEN22, 0.0 },
826 { GOLDENINV22, SQRT2INV, GOLDEN22, 0.0 },
827 { -SQRT2INV, 0.0, -GOLDEN22, GOLDENINV22 },
828 { SQRT2INV, 0.0, -GOLDEN22, GOLDENINV22 },
829 { -GOLDEN2, -GOLDEN2, -GOLDEN2, GOLDENINV22 },
830 { GOLDEN2, -GOLDEN2, -GOLDEN2, GOLDENINV22 },
831 { -GOLDEN2, GOLDEN2, -GOLDEN2, GOLDENINV22 },
832 { GOLDEN2, GOLDEN2, -GOLDEN2, GOLDENINV22 },
833 { 0.0, -GOLDEN22, -SQRT2INV, GOLDENINV22 },
834 { 0.0, GOLDEN22, -SQRT2INV, GOLDENINV22 },
835 { -GOLDEN22, -SQRT2INV, 0.0, GOLDENINV22 },
836 { GOLDEN22, -SQRT2INV, 0.0, GOLDENINV22 },
837 { -GOLDEN22, SQRT2INV, 0.0, GOLDENINV22 },
838 { GOLDEN22, SQRT2INV, 0.0, GOLDENINV22 },
839 { 0.0, -GOLDEN22, SQRT2INV, GOLDENINV22 },
840 { 0.0, GOLDEN22, SQRT2INV, GOLDENINV22 },
841 { -GOLDEN2, -GOLDEN2, GOLDEN2, GOLDENINV22 },
842 { GOLDEN2, -GOLDEN2, GOLDEN2, GOLDENINV22 },
843 { -GOLDEN2, GOLDEN2, GOLDEN2, GOLDENINV22 },
844 { GOLDEN2, GOLDEN2, GOLDEN2, GOLDENINV22 },
845 { -SQRT2INV, 0.0, GOLDEN22, GOLDENINV22 },
846 { SQRT2INV, 0.0, GOLDEN22, GOLDENINV22 },
847 { -GOLDENINV2, -GOLDENINV2, -GOLDEN22, GOLDENINV2 },
848 { GOLDENINV2, -GOLDENINV2, -GOLDEN22, GOLDENINV2 },
849 { -GOLDENINV2, GOLDENINV2, -GOLDEN22, GOLDENINV2 },
850 { GOLDENINV2, GOLDENINV2, -GOLDEN22, GOLDENINV2 },
851 { -GOLDEN2, 0.0, -SQRT5OVER2, GOLDENINV2 },
852 { GOLDEN2, 0.0, -SQRT5OVER2, GOLDENINV2 },
853 { -SQRT2INV, -GOLDEN2, -SQRT2, GOLDENINV2 },
854 { SQRT2INV, -GOLDEN2, -SQRT2, GOLDENINV2 },
855 { -SQRT2INV, GOLDEN2, -SQRT2, GOLDENINV2 },
856 { SQRT2INV, GOLDEN2, -SQRT2, GOLDENINV2 },
857 { 0.0, -SQRT5OVER2, -GOLDEN2, GOLDENINV2 },
858 { -SQRT2, -SQRT2INV, -GOLDEN2, GOLDENINV2 },
859 { SQRT2, -SQRT2INV, -GOLDEN2, GOLDENINV2 },
860 { -SQRT2, SQRT2INV, -GOLDEN2, GOLDENINV2 },
861 { SQRT2, SQRT2INV, -GOLDEN2, GOLDENINV2 },
862 { 0.0, SQRT5OVER2, -GOLDEN2, GOLDENINV2 },
863 { -GOLDEN2, -SQRT2, -SQRT2INV, GOLDENINV2 },
864 { GOLDEN2, -SQRT2, -SQRT2INV, GOLDENINV2 },
865 { -GOLDEN2, SQRT2, -SQRT2INV, GOLDENINV2 },
866 { GOLDEN2, SQRT2, -SQRT2INV, GOLDENINV2 },
867 { -GOLDENINV2, -GOLDEN22, -GOLDENINV2, GOLDENINV2 },
868 { GOLDENINV2, -GOLDEN22, -GOLDENINV2, GOLDENINV2 },
869 { -GOLDEN22, -GOLDENINV2, -GOLDENINV2, GOLDENINV2 },
870 { GOLDEN22, -GOLDENINV2, -GOLDENINV2, GOLDENINV2 },
871 { -GOLDEN22, GOLDENINV2, -GOLDENINV2, GOLDENINV2 },
872 { GOLDEN22, GOLDENINV2, -GOLDENINV2, GOLDENINV2 },
873 { -GOLDENINV2, GOLDEN22, -GOLDENINV2, GOLDENINV2 },
874 { GOLDENINV2, GOLDEN22, -GOLDENINV2, GOLDENINV2 },
875 { -SQRT5OVER2, -GOLDEN2, 0.0, GOLDENINV2 },
876 { SQRT5OVER2, -GOLDEN2, 0.0, GOLDENINV2 },
877 { -SQRT5OVER2, GOLDEN2, 0.0, GOLDENINV2 },
878 { SQRT5OVER2, GOLDEN2, 0.0, GOLDENINV2 },
879 { -GOLDENINV2, -GOLDEN22, GOLDENINV2, GOLDENINV2 },
880 { GOLDENINV2, -GOLDEN22, GOLDENINV2, GOLDENINV2 },
881 { -GOLDEN22, -GOLDENINV2, GOLDENINV2, GOLDENINV2 },
882 { GOLDEN22, -GOLDENINV2, GOLDENINV2, GOLDENINV2 },
883 { -GOLDEN22, GOLDENINV2, GOLDENINV2, GOLDENINV2 },
884 { GOLDEN22, GOLDENINV2, GOLDENINV2, GOLDENINV2 },
885 { -GOLDENINV2, GOLDEN22, GOLDENINV2, GOLDENINV2 },
886 { GOLDENINV2, GOLDEN22, GOLDENINV2, GOLDENINV2 },
887 { -GOLDEN2, -SQRT2, SQRT2INV, GOLDENINV2 },
888 { GOLDEN2, -SQRT2, SQRT2INV, GOLDENINV2 },
889 { -GOLDEN2, SQRT2, SQRT2INV, GOLDENINV2 },
890 { GOLDEN2, SQRT2, SQRT2INV, GOLDENINV2 },
891 { 0.0, -SQRT5OVER2, GOLDEN2, GOLDENINV2 },
892 { -SQRT2, -SQRT2INV, GOLDEN2, GOLDENINV2 },
893 { SQRT2, -SQRT2INV, GOLDEN2, GOLDENINV2 },
894 { -SQRT2, SQRT2INV, GOLDEN2, GOLDENINV2 },
895 { SQRT2, SQRT2INV, GOLDEN2, GOLDENINV2 },
896 { 0.0, SQRT5OVER2, GOLDEN2, GOLDENINV2 },
897 { -SQRT2INV, -GOLDEN2, SQRT2, GOLDENINV2 },
898 { SQRT2INV, -GOLDEN2, SQRT2, GOLDENINV2 },
899 { -SQRT2INV, GOLDEN2, SQRT2, GOLDENINV2 },
900 { SQRT2INV, GOLDEN2, SQRT2, GOLDENINV2 },
901 { -GOLDEN2, 0.0, SQRT5OVER2, GOLDENINV2 },
902 { GOLDEN2, 0.0, SQRT5OVER2, GOLDENINV2 },
903 { -GOLDENINV2, -GOLDENINV2, GOLDEN22, GOLDENINV2 },
904 { GOLDENINV2, -GOLDENINV2, GOLDEN22, GOLDENINV2 },
905 { -GOLDENINV2, GOLDENINV2, GOLDEN22, GOLDENINV2 },
906 { GOLDENINV2, GOLDENINV2, GOLDEN22, GOLDENINV2 },
907 { 0.0, -GOLDENINV22, -GOLDEN22, SQRT2INV },
908 { 0.0, GOLDENINV22, -GOLDEN22, SQRT2INV },
909 { -SQRT2INV, -SQRT2INV, -SQRT5OVER2, SQRT2INV },
910 { SQRT2INV, -SQRT2INV, -SQRT5OVER2, SQRT2INV },
911 { -SQRT2INV, SQRT2INV, -SQRT5OVER2, SQRT2INV },
912 { SQRT2INV, SQRT2INV, -SQRT5OVER2, SQRT2INV },
913 { -GOLDEN2, -GOLDENINV2, -SQRT2, SQRT2INV },
914 { GOLDEN2, -GOLDENINV2, -SQRT2, SQRT2INV },
915 { -GOLDEN2, GOLDENINV2, -SQRT2, SQRT2INV },
916 { GOLDEN2, GOLDENINV2, -SQRT2, SQRT2INV },
917 { -GOLDENINV2, -SQRT2, -GOLDEN2, SQRT2INV },
918 { GOLDENINV2, -SQRT2, -GOLDEN2, SQRT2INV },
919 { -GOLDENINV2, SQRT2, -GOLDEN2, SQRT2INV },
920 { GOLDENINV2, SQRT2, -GOLDEN2, SQRT2INV },
921 { -SQRT2INV, -SQRT5OVER2, -SQRT2INV, SQRT2INV },
922 { SQRT2INV, -SQRT5OVER2, -SQRT2INV, SQRT2INV },
923 { -SQRT5OVER2, -SQRT2INV, -SQRT2INV, SQRT2INV },
924 { SQRT5OVER2, -SQRT2INV, -SQRT2INV, SQRT2INV },
925 { -SQRT5OVER2, SQRT2INV, -SQRT2INV, SQRT2INV },
926 { SQRT5OVER2, SQRT2INV, -SQRT2INV, SQRT2INV },
927 { -SQRT2INV, SQRT5OVER2, -SQRT2INV, SQRT2INV },
928 { SQRT2INV, SQRT5OVER2, -SQRT2INV, SQRT2INV },
929 { -SQRT2, -GOLDEN2, -GOLDENINV2, SQRT2INV },
930 { SQRT2, -GOLDEN2, -GOLDENINV2, SQRT2INV },
931 { -SQRT2, GOLDEN2, -GOLDENINV2, SQRT2INV },
932 { SQRT2, GOLDEN2, -GOLDENINV2, SQRT2INV },
933 { -GOLDEN22, 0.0, -GOLDENINV22, SQRT2INV },
934 { GOLDEN22, 0.0, -GOLDENINV22, SQRT2INV },
935 { -GOLDENINV22, -GOLDEN22, 0.0, SQRT2INV },
936 { GOLDENINV22, -GOLDEN22, 0.0, SQRT2INV },
937 { -GOLDENINV22, GOLDEN22, 0.0, SQRT2INV },
938 { GOLDENINV22, GOLDEN22, 0.0, SQRT2INV },
939 { -GOLDEN22, 0.0, GOLDENINV22, SQRT2INV },
940 { GOLDEN22, 0.0, GOLDENINV22, SQRT2INV },
941 { -SQRT2, -GOLDEN2, GOLDENINV2, SQRT2INV },
942 { SQRT2, -GOLDEN2, GOLDENINV2, SQRT2INV },
943 { -SQRT2, GOLDEN2, GOLDENINV2, SQRT2INV },
944 { SQRT2, GOLDEN2, GOLDENINV2, SQRT2INV },
945 { -SQRT2INV, -SQRT5OVER2, SQRT2INV, SQRT2INV },
946 { SQRT2INV, -SQRT5OVER2, SQRT2INV, SQRT2INV },
947 { -SQRT5OVER2, -SQRT2INV, SQRT2INV, SQRT2INV },
948 { SQRT5OVER2, -SQRT2INV, SQRT2INV, SQRT2INV },
949 { -SQRT5OVER2, SQRT2INV, SQRT2INV, SQRT2INV },
950 { SQRT5OVER2, SQRT2INV, SQRT2INV, SQRT2INV },
951 { -SQRT2INV, SQRT5OVER2, SQRT2INV, SQRT2INV },
952 { SQRT2INV, SQRT5OVER2, SQRT2INV, SQRT2INV },
953 { -GOLDENINV2, -SQRT2, GOLDEN2, SQRT2INV },
954 { GOLDENINV2, -SQRT2, GOLDEN2, SQRT2INV },
955 { -GOLDENINV2, SQRT2, GOLDEN2, SQRT2INV },
956 { GOLDENINV2, SQRT2, GOLDEN2, SQRT2INV },
957 { -GOLDEN2, -GOLDENINV2, SQRT2, SQRT2INV },
958 { GOLDEN2, -GOLDENINV2, SQRT2, SQRT2INV },
959 { -GOLDEN2, GOLDENINV2, SQRT2, SQRT2INV },
960 { GOLDEN2, GOLDENINV2, SQRT2, SQRT2INV },
961 { -SQRT2INV, -SQRT2INV, SQRT5OVER2, SQRT2INV },
962 { SQRT2INV, -SQRT2INV, SQRT5OVER2, SQRT2INV },
963 { -SQRT2INV, SQRT2INV, SQRT5OVER2, SQRT2INV },
964 { SQRT2INV, SQRT2INV, SQRT5OVER2, SQRT2INV },
965 { 0.0, -GOLDENINV22, GOLDEN22, SQRT2INV },
966 { 0.0, GOLDENINV22, GOLDEN22, SQRT2INV },
967 { 0.0, -GOLDENINV2, -SQRT5OVER2, GOLDEN2 },
968 { 0.0, GOLDENINV2, -SQRT5OVER2, GOLDEN2 },
969 { -GOLDENINV2, -SQRT2INV, -SQRT2, GOLDEN2 },
970 { GOLDENINV2, -SQRT2INV, -SQRT2, GOLDEN2 },
971 { -GOLDENINV2, SQRT2INV, -SQRT2, GOLDEN2 },
972 { GOLDENINV2, SQRT2INV, -SQRT2, GOLDEN2 },
973 { -GOLDENINV22, -GOLDEN2, -GOLDEN2, GOLDEN2 },
974 { GOLDENINV22, -GOLDEN2, -GOLDEN2, GOLDEN2 },
975 { -GOLDEN2, -GOLDENINV22, -GOLDEN2, GOLDEN2 },
976 { GOLDEN2, -GOLDENINV22, -GOLDEN2, GOLDEN2 },
977 { -GOLDEN2, GOLDENINV22, -GOLDEN2, GOLDEN2 },
978 { GOLDEN2, GOLDENINV22, -GOLDEN2, GOLDEN2 },
979 { -GOLDENINV22, GOLDEN2, -GOLDEN2, GOLDEN2 },
980 { GOLDENINV22, GOLDEN2, -GOLDEN2, GOLDEN2 },
981 { -SQRT2, -GOLDENINV2, -SQRT2INV, GOLDEN2 },
982 { SQRT2, -GOLDENINV2, -SQRT2INV, GOLDEN2 },
983 { -SQRT2, GOLDENINV2, -SQRT2INV, GOLDEN2 },
984 { SQRT2, GOLDENINV2, -SQRT2INV, GOLDEN2 },
985 { -SQRT2INV, -SQRT2, -GOLDENINV2, GOLDEN2 },
986 { SQRT2INV, -SQRT2, -GOLDENINV2, GOLDEN2 },
987 { -SQRT5OVER2, 0.0, -GOLDENINV2, GOLDEN2 },
988 { SQRT5OVER2, 0.0, -GOLDENINV2, GOLDEN2 },
989 { -SQRT2INV, SQRT2, -GOLDENINV2, GOLDEN2 },
990 { SQRT2INV, SQRT2, -GOLDENINV2, GOLDEN2 },
991 { -GOLDEN2, -GOLDEN2, -GOLDENINV22, GOLDEN2 },
992 { GOLDEN2, -GOLDEN2, -GOLDENINV22, GOLDEN2 },
993 { -GOLDEN2, GOLDEN2, -GOLDENINV22, GOLDEN2 },
994 { GOLDEN2, GOLDEN2, -GOLDENINV22, GOLDEN2 },
995 { -GOLDENINV2, -SQRT5OVER2, 0.0, GOLDEN2 },
996 { GOLDENINV2, -SQRT5OVER2, 0.0, GOLDEN2 },
997 { -GOLDENINV2, SQRT5OVER2, 0.0, GOLDEN2 },
998 { GOLDENINV2, SQRT5OVER2, 0.0, GOLDEN2 },
999 { -GOLDEN2, -GOLDEN2, GOLDENINV22, GOLDEN2 },
1000 { GOLDEN2, -GOLDEN2, GOLDENINV22, GOLDEN2 },
1001 { -GOLDEN2, GOLDEN2, GOLDENINV22, GOLDEN2 },
1002 { GOLDEN2, GOLDEN2, GOLDENINV22, GOLDEN2 },
1003 { -SQRT2INV, -SQRT2, GOLDENINV2, GOLDEN2 },
1004 { SQRT2INV, -SQRT2, GOLDENINV2, GOLDEN2 },
1005 { -SQRT5OVER2, 0.0, GOLDENINV2, GOLDEN2 },
1006 { SQRT5OVER2, 0.0, GOLDENINV2, GOLDEN2 },
1007 { -SQRT2INV, SQRT2, GOLDENINV2, GOLDEN2 },
1008 { SQRT2INV, SQRT2, GOLDENINV2, GOLDEN2 },
1009 { -SQRT2, -GOLDENINV2, SQRT2INV, GOLDEN2 },
1010 { SQRT2, -GOLDENINV2, SQRT2INV, GOLDEN2 },
1011 { -SQRT2, GOLDENINV2, SQRT2INV, GOLDEN2 },
1012 { SQRT2, GOLDENINV2, SQRT2INV, GOLDEN2 },
1013 { -GOLDENINV22, -GOLDEN2, GOLDEN2, GOLDEN2 },
1014 { GOLDENINV22, -GOLDEN2, GOLDEN2, GOLDEN2 },
1015 { -GOLDEN2, -GOLDENINV22, GOLDEN2, GOLDEN2 },
1016 { GOLDEN2, -GOLDENINV22, GOLDEN2, GOLDEN2 },
1017 { -GOLDEN2, GOLDENINV22, GOLDEN2, GOLDEN2 },
1018 { GOLDEN2, GOLDENINV22, GOLDEN2, GOLDEN2 },
1019 { -GOLDENINV22, GOLDEN2, GOLDEN2, GOLDEN2 },
1020 { GOLDENINV22, GOLDEN2, GOLDEN2, GOLDEN2 },
1021 { -GOLDENINV2, -SQRT2INV, SQRT2, GOLDEN2 },
1022 { GOLDENINV2, -SQRT2INV, SQRT2, GOLDEN2 },
1023 { -GOLDENINV2, SQRT2INV, SQRT2, GOLDEN2 },
1024 { GOLDENINV2, SQRT2INV, SQRT2, GOLDEN2 },
1025 { 0.0, -GOLDENINV2, SQRT5OVER2, GOLDEN2 },
1026 { 0.0, GOLDENINV2, SQRT5OVER2, GOLDEN2 },
1027 { 0.0, 0.0, -SQRT2, SQRT2 },
1028 { -SQRT2INV, -GOLDENINV2, -GOLDEN2, SQRT2 },
1029 { SQRT2INV, -GOLDENINV2, -GOLDEN2, SQRT2 },
1030 { -SQRT2INV, GOLDENINV2, -GOLDEN2, SQRT2 },
1031 { SQRT2INV, GOLDENINV2, -GOLDEN2, SQRT2 },
1032 { -GOLDENINV2, -GOLDEN2, -SQRT2INV, SQRT2 },
1033 { GOLDENINV2, -GOLDEN2, -SQRT2INV, SQRT2 },
1034 { -GOLDENINV2, GOLDEN2, -SQRT2INV, SQRT2 },
1035 { GOLDENINV2, GOLDEN2, -SQRT2INV, SQRT2 },
1036 { -GOLDEN2, -SQRT2INV, -GOLDENINV2, SQRT2 },
1037 { GOLDEN2, -SQRT2INV, -GOLDENINV2, SQRT2 },
1038 { -GOLDEN2, SQRT2INV, -GOLDENINV2, SQRT2 },
1039 { GOLDEN2, SQRT2INV, -GOLDENINV2, SQRT2 },
1040 { 0.0, -SQRT2, 0.0, SQRT2 },
1041 { -SQRT2, 0.0, 0.0, SQRT2 },
1042 { SQRT2, 0.0, 0.0, SQRT2 },
1043 { 0.0, SQRT2, 0.0, SQRT2 },
1044 { -GOLDEN2, -SQRT2INV, GOLDENINV2, SQRT2 },
1045 { GOLDEN2, -SQRT2INV, GOLDENINV2, SQRT2 },
1046 { -GOLDEN2, SQRT2INV, GOLDENINV2, SQRT2 },
1047 { GOLDEN2, SQRT2INV, GOLDENINV2, SQRT2 },
1048 { -GOLDENINV2, -GOLDEN2, SQRT2INV, SQRT2 },
1049 { GOLDENINV2, -GOLDEN2, SQRT2INV, SQRT2 },
1050 { -GOLDENINV2, GOLDEN2, SQRT2INV, SQRT2 },
1051 { GOLDENINV2, GOLDEN2, SQRT2INV, SQRT2 },
1052 { -SQRT2INV, -GOLDENINV2, GOLDEN2, SQRT2 },
1053 { SQRT2INV, -GOLDENINV2, GOLDEN2, SQRT2 },
1054 { -SQRT2INV, GOLDENINV2, GOLDEN2, SQRT2 },
1055 { SQRT2INV, GOLDENINV2, GOLDEN2, SQRT2 },
1056 { 0.0, 0.0, SQRT2, SQRT2 },
1057 { -GOLDENINV2, 0.0, -GOLDEN2, SQRT5OVER2 },
1058 { GOLDENINV2, 0.0, -GOLDEN2, SQRT5OVER2 },
1059 { -SQRT2INV, -SQRT2INV, -SQRT2INV, SQRT5OVER2 },
1060 { SQRT2INV, -SQRT2INV, -SQRT2INV, SQRT5OVER2 },
1061 { -SQRT2INV, SQRT2INV, -SQRT2INV, SQRT5OVER2 },
1062 { SQRT2INV, SQRT2INV, -SQRT2INV, SQRT5OVER2 },
1063 { 0.0, -GOLDEN2, -GOLDENINV2, SQRT5OVER2 },
1064 { 0.0, GOLDEN2, -GOLDENINV2, SQRT5OVER2 },
1065 { -GOLDEN2, -GOLDENINV2, 0.0, SQRT5OVER2 },
1066 { GOLDEN2, -GOLDENINV2, 0.0, SQRT5OVER2 },
1067 { -GOLDEN2, GOLDENINV2, 0.0, SQRT5OVER2 },
1068 { GOLDEN2, GOLDENINV2, 0.0, SQRT5OVER2 },
1069 { 0.0, -GOLDEN2, GOLDENINV2, SQRT5OVER2 },
1070 { 0.0, GOLDEN2, GOLDENINV2, SQRT5OVER2 },
1071 { -SQRT2INV, -SQRT2INV, SQRT2INV, SQRT5OVER2 },
1072 { SQRT2INV, -SQRT2INV, SQRT2INV, SQRT5OVER2 },
1073 { -SQRT2INV, SQRT2INV, SQRT2INV, SQRT5OVER2 },
1074 { SQRT2INV, SQRT2INV, SQRT2INV, SQRT5OVER2 },
1075 { -GOLDENINV2, 0.0, GOLDEN2, SQRT5OVER2 },
1076 { GOLDENINV2, 0.0, GOLDEN2, SQRT5OVER2 },
1077 { -GOLDENINV22, 0.0, -SQRT2INV, GOLDEN22 },
1078 { GOLDENINV22, 0.0, -SQRT2INV, GOLDEN22 },
1079 { -GOLDENINV2, -GOLDENINV2, -GOLDENINV2, GOLDEN22 },
1080 { GOLDENINV2, -GOLDENINV2, -GOLDENINV2, GOLDEN22 },
1081 { -GOLDENINV2, GOLDENINV2, -GOLDENINV2, GOLDEN22 },
1082 { GOLDENINV2, GOLDENINV2, -GOLDENINV2, GOLDEN22 },
1083 { 0.0, -SQRT2INV, -GOLDENINV22, GOLDEN22 },
1084 { 0.0, SQRT2INV, -GOLDENINV22, GOLDEN22 },
1085 { -SQRT2INV, -GOLDENINV22, 0.0, GOLDEN22 },
1086 { SQRT2INV, -GOLDENINV22, 0.0, GOLDEN22 },
1087 { -SQRT2INV, GOLDENINV22, 0.0, GOLDEN22 },
1088 { SQRT2INV, GOLDENINV22, 0.0, GOLDEN22 },
1089 { 0.0, -SQRT2INV, GOLDENINV22, GOLDEN22 },
1090 { 0.0, SQRT2INV, GOLDENINV22, GOLDEN22 },
1091 { -GOLDENINV2, -GOLDENINV2, GOLDENINV2, GOLDEN22 },
1092 { GOLDENINV2, -GOLDENINV2, GOLDENINV2, GOLDEN22 },
1093 { -GOLDENINV2, GOLDENINV2, GOLDENINV2, GOLDEN22 },
1094 { GOLDENINV2, GOLDENINV2, GOLDENINV2, GOLDEN22 },
1095 { -GOLDENINV22, 0.0, SQRT2INV, GOLDEN22 },
1096 { GOLDENINV22, 0.0, SQRT2INV, GOLDEN22 }
1099 static int edge_120[NUM_EDGE_120][2] = {
1100 { 0, 1 }, { 0, 2 }, { 0, 4 }, { 0, 20 }, { 1, 3 },
1101 { 1, 5 }, { 1, 21 }, { 2, 6 }, { 2, 8 }, { 2, 22 },
1102 { 3, 6 }, { 3, 9 }, { 3, 23 }, { 4, 7 }, { 4, 10 },
1103 { 4, 24 }, { 5, 7 }, { 5, 11 }, { 5, 25 }, { 6, 12 },
1104 { 6, 26 }, { 7, 13 }, { 7, 27 }, { 8, 10 }, { 8, 14 },
1105 { 8, 28 }, { 9, 11 }, { 9, 15 }, { 9, 29 }, { 10, 16 },
1106 { 10, 30 }, { 11, 17 }, { 11, 31 }, { 12, 14 }, { 12, 15 },
1107 { 12, 32 }, { 13, 16 }, { 13, 17 }, { 13, 33 }, { 14, 18 },
1108 { 14, 34 }, { 15, 19 }, { 15, 35 }, { 16, 18 }, { 16, 36 },
1109 { 17, 19 }, { 17, 37 }, { 18, 19 }, { 18, 38 }, { 19, 39 },
1110 { 20, 40 }, { 20, 41 }, { 20, 43 }, { 21, 40 }, { 21, 42 },
1111 { 21, 44 }, { 22, 41 }, { 22, 45 }, { 22, 49 }, { 23, 42 },
1112 { 23, 46 }, { 23, 50 }, { 24, 43 }, { 24, 47 }, { 24, 51 },
1113 { 25, 44 }, { 25, 48 }, { 25, 52 }, { 26, 45 }, { 26, 46 },
1114 { 26, 53 }, { 27, 47 }, { 27, 48 }, { 27, 56 }, { 28, 49 },
1115 { 28, 54 }, { 28, 57 }, { 29, 50 }, { 29, 55 }, { 29, 58 },
1116 { 30, 51 }, { 30, 54 }, { 30, 59 }, { 31, 52 }, { 31, 55 },
1117 { 31, 60 }, { 32, 53 }, { 32, 61 }, { 32, 62 }, { 33, 56 },
1118 { 33, 63 }, { 33, 64 }, { 34, 57 }, { 34, 61 }, { 34, 65 },
1119 { 35, 58 }, { 35, 62 }, { 35, 66 }, { 36, 59 }, { 36, 63 },
1120 { 36, 67 }, { 37, 60 }, { 37, 64 }, { 37, 68 }, { 38, 65 },
1121 { 38, 67 }, { 38, 69 }, { 39, 66 }, { 39, 68 }, { 39, 69 },
1122 { 40, 70 }, { 40, 71 }, { 41, 72 }, { 41, 78 }, { 42, 73 },
1123 { 42, 79 }, { 43, 74 }, { 43, 80 }, { 44, 75 }, { 44, 81 },
1124 { 45, 76 }, { 45, 88 }, { 46, 77 }, { 46, 89 }, { 47, 82 },
1125 { 47, 92 }, { 48, 83 }, { 48, 93 }, { 49, 84 }, { 49, 94 },
1126 { 50, 85 }, { 50, 95 }, { 51, 86 }, { 51, 96 }, { 52, 87 },
1127 { 52, 97 }, { 53, 98 }, { 53, 99 }, { 54, 90 }, { 54, 108 },
1128 { 55, 91 }, { 55, 109 }, { 56, 100 }, { 56, 101 }, { 57, 102 },
1129 { 57, 112 }, { 58, 103 }, { 58, 113 }, { 59, 104 }, { 59, 114 },
1130 { 60, 105 }, { 60, 115 }, { 61, 106 }, { 61, 116 }, { 62, 107 },
1131 { 62, 117 }, { 63, 110 }, { 63, 122 }, { 64, 111 }, { 64, 123 },
1132 { 65, 118 }, { 65, 124 }, { 66, 119 }, { 66, 125 }, { 67, 120 },
1133 { 67, 126 }, { 68, 121 }, { 68, 127 }, { 69, 128 }, { 69, 129 },
1134 { 70, 72 }, { 70, 73 }, { 70, 130 }, { 71, 74 }, { 71, 75 },
1135 { 71, 131 }, { 72, 76 }, { 72, 132 }, { 73, 77 }, { 73, 133 },
1136 { 74, 82 }, { 74, 134 }, { 75, 83 }, { 75, 135 }, { 76, 77 },
1137 { 76, 140 }, { 77, 141 }, { 78, 80 }, { 78, 84 }, { 78, 136 },
1138 { 79, 81 }, { 79, 85 }, { 79, 137 }, { 80, 86 }, { 80, 138 },
1139 { 81, 87 }, { 81, 139 }, { 82, 83 }, { 82, 142 }, { 83, 143 },
1140 { 84, 90 }, { 84, 146 }, { 85, 91 }, { 85, 147 }, { 86, 90 },
1141 { 86, 148 }, { 87, 91 }, { 87, 149 }, { 88, 94 }, { 88, 98 },
1142 { 88, 144 }, { 89, 95 }, { 89, 99 }, { 89, 145 }, { 90, 156 },
1143 { 91, 157 }, { 92, 96 }, { 92, 100 }, { 92, 150 }, { 93, 97 },
1144 { 93, 101 }, { 93, 151 }, { 94, 102 }, { 94, 152 }, { 95, 103 },
1145 { 95, 153 }, { 96, 104 }, { 96, 154 }, { 97, 105 }, { 97, 155 },
1146 { 98, 106 }, { 98, 158 }, { 99, 107 }, { 99, 159 }, { 100, 110 },
1147 { 100, 160 }, { 101, 111 }, { 101, 161 }, { 102, 106 }, { 102, 164 },
1148 { 103, 107 }, { 103, 165 }, { 104, 110 }, { 104, 166 }, { 105, 111 },
1149 { 105, 167 }, { 106, 168 }, { 107, 169 }, { 108, 112 }, { 108, 114 },
1150 { 108, 162 }, { 109, 113 }, { 109, 115 }, { 109, 163 }, { 110, 174 },
1151 { 111, 175 }, { 112, 118 }, { 112, 170 }, { 113, 119 }, { 113, 171 },
1152 { 114, 120 }, { 114, 172 }, { 115, 121 }, { 115, 173 }, { 116, 117 },
1153 { 116, 124 }, { 116, 176 }, { 117, 125 }, { 117, 177 }, { 118, 120 },
1154 { 118, 180 }, { 119, 121 }, { 119, 181 }, { 120, 182 }, { 121, 183 },
1155 { 122, 123 }, { 122, 126 }, { 122, 178 }, { 123, 127 }, { 123, 179 },
1156 { 124, 128 }, { 124, 184 }, { 125, 128 }, { 125, 185 }, { 126, 129 },
1157 { 126, 186 }, { 127, 129 }, { 127, 187 }, { 128, 188 }, { 129, 189 },
1158 { 130, 131 }, { 130, 190 }, { 130, 191 }, { 131, 192 }, { 131, 193 },
1159 { 132, 136 }, { 132, 190 }, { 132, 196 }, { 133, 137 }, { 133, 191 },
1160 { 133, 197 }, { 134, 138 }, { 134, 192 }, { 134, 198 }, { 135, 139 },
1161 { 135, 193 }, { 135, 199 }, { 136, 194 }, { 136, 201 }, { 137, 195 },
1162 { 137, 202 }, { 138, 194 }, { 138, 203 }, { 139, 195 }, { 139, 204 },
1163 { 140, 144 }, { 140, 196 }, { 140, 200 }, { 141, 145 }, { 141, 197 },
1164 { 141, 200 }, { 142, 150 }, { 142, 198 }, { 142, 205 }, { 143, 151 },
1165 { 143, 199 }, { 143, 205 }, { 144, 206 }, { 144, 210 }, { 145, 207 },
1166 { 145, 211 }, { 146, 152 }, { 146, 201 }, { 146, 212 }, { 147, 153 },
1167 { 147, 202 }, { 147, 213 }, { 148, 154 }, { 148, 203 }, { 148, 214 },
1168 { 149, 155 }, { 149, 204 }, { 149, 215 }, { 150, 208 }, { 150, 216 },
1169 { 151, 209 }, { 151, 217 }, { 152, 206 }, { 152, 218 }, { 153, 207 },
1170 { 153, 219 }, { 154, 208 }, { 154, 220 }, { 155, 209 }, { 155, 221 },
1171 { 156, 162 }, { 156, 212 }, { 156, 214 }, { 157, 163 }, { 157, 213 },
1172 { 157, 215 }, { 158, 159 }, { 158, 210 }, { 158, 222 }, { 159, 211 },
1173 { 159, 223 }, { 160, 161 }, { 160, 216 }, { 160, 228 }, { 161, 217 },
1174 { 161, 229 }, { 162, 224 }, { 162, 226 }, { 163, 225 }, { 163, 227 },
1175 { 164, 170 }, { 164, 218 }, { 164, 230 }, { 165, 171 }, { 165, 219 },
1176 { 165, 231 }, { 166, 172 }, { 166, 220 }, { 166, 232 }, { 167, 173 },
1177 { 167, 221 }, { 167, 233 }, { 168, 176 }, { 168, 222 }, { 168, 230 },
1178 { 169, 177 }, { 169, 223 }, { 169, 231 }, { 170, 224 }, { 170, 235 },
1179 { 171, 225 }, { 171, 236 }, { 172, 226 }, { 172, 237 }, { 173, 227 },
1180 { 173, 238 }, { 174, 178 }, { 174, 228 }, { 174, 232 }, { 175, 179 },
1181 { 175, 229 }, { 175, 233 }, { 176, 234 }, { 176, 240 }, { 177, 234 },
1182 { 177, 241 }, { 178, 239 }, { 178, 242 }, { 179, 239 }, { 179, 243 },
1183 { 180, 184 }, { 180, 235 }, { 180, 244 }, { 181, 185 }, { 181, 236 },
1184 { 181, 245 }, { 182, 186 }, { 182, 237 }, { 182, 244 }, { 183, 187 },
1185 { 183, 238 }, { 183, 245 }, { 184, 240 }, { 184, 246 }, { 185, 241 },
1186 { 185, 247 }, { 186, 242 }, { 186, 248 }, { 187, 243 }, { 187, 249 },
1187 { 188, 189 }, { 188, 246 }, { 188, 247 }, { 189, 248 }, { 189, 249 },
1188 { 190, 250 }, { 190, 270 }, { 191, 251 }, { 191, 271 }, { 192, 250 },
1189 { 192, 272 }, { 193, 251 }, { 193, 273 }, { 194, 250 }, { 194, 279 },
1190 { 195, 251 }, { 195, 280 }, { 196, 252 }, { 196, 274 }, { 197, 253 },
1191 { 197, 275 }, { 198, 254 }, { 198, 276 }, { 199, 255 }, { 199, 277 },
1192 { 200, 256 }, { 200, 278 }, { 201, 252 }, { 201, 282 }, { 202, 253 },
1193 { 202, 283 }, { 203, 254 }, { 203, 284 }, { 204, 255 }, { 204, 285 },
1194 { 205, 257 }, { 205, 281 }, { 206, 252 }, { 206, 290 }, { 207, 253 },
1195 { 207, 291 }, { 208, 254 }, { 208, 292 }, { 209, 255 }, { 209, 293 },
1196 { 210, 256 }, { 210, 294 }, { 211, 256 }, { 211, 295 }, { 212, 258 },
1197 { 212, 286 }, { 213, 259 }, { 213, 287 }, { 214, 260 }, { 214, 288 },
1198 { 215, 261 }, { 215, 289 }, { 216, 257 }, { 216, 296 }, { 217, 257 },
1199 { 217, 297 }, { 218, 258 }, { 218, 298 }, { 219, 259 }, { 219, 299 },
1200 { 220, 260 }, { 220, 300 }, { 221, 261 }, { 221, 301 }, { 222, 262 },
1201 { 222, 302 }, { 223, 262 }, { 223, 303 }, { 224, 258 }, { 224, 310 },
1202 { 225, 259 }, { 225, 311 }, { 226, 260 }, { 226, 312 }, { 227, 261 },
1203 { 227, 313 }, { 228, 263 }, { 228, 304 }, { 229, 263 }, { 229, 305 },
1204 { 230, 264 }, { 230, 306 }, { 231, 265 }, { 231, 307 }, { 232, 266 },
1205 { 232, 308 }, { 233, 267 }, { 233, 309 }, { 234, 262 }, { 234, 318 },
1206 { 235, 264 }, { 235, 314 }, { 236, 265 }, { 236, 315 }, { 237, 266 },
1207 { 237, 316 }, { 238, 267 }, { 238, 317 }, { 239, 263 }, { 239, 321 },
1208 { 240, 264 }, { 240, 322 }, { 241, 265 }, { 241, 323 }, { 242, 266 },
1209 { 242, 324 }, { 243, 267 }, { 243, 325 }, { 244, 268 }, { 244, 319 },
1210 { 245, 269 }, { 245, 320 }, { 246, 268 }, { 246, 326 }, { 247, 269 },
1211 { 247, 327 }, { 248, 268 }, { 248, 328 }, { 249, 269 }, { 249, 329 },
1212 { 250, 330 }, { 251, 331 }, { 252, 332 }, { 253, 333 }, { 254, 334 },
1213 { 255, 335 }, { 256, 336 }, { 257, 337 }, { 258, 338 }, { 259, 339 },
1214 { 260, 340 }, { 261, 341 }, { 262, 342 }, { 263, 343 }, { 264, 344 },
1215 { 265, 345 }, { 266, 346 }, { 267, 347 }, { 268, 348 }, { 269, 349 },
1216 { 270, 271 }, { 270, 274 }, { 270, 350 }, { 271, 275 }, { 271, 351 },
1217 { 272, 273 }, { 272, 276 }, { 272, 352 }, { 273, 277 }, { 273, 353 },
1218 { 274, 278 }, { 274, 356 }, { 275, 278 }, { 275, 357 }, { 276, 281 },
1219 { 276, 358 }, { 277, 281 }, { 277, 359 }, { 278, 360 }, { 279, 282 },
1220 { 279, 284 }, { 279, 354 }, { 280, 283 }, { 280, 285 }, { 280, 355 },
1221 { 281, 365 }, { 282, 286 }, { 282, 361 }, { 283, 287 }, { 283, 362 },
1222 { 284, 288 }, { 284, 363 }, { 285, 289 }, { 285, 364 }, { 286, 288 },
1223 { 286, 372 }, { 287, 289 }, { 287, 373 }, { 288, 374 }, { 289, 375 },
1224 { 290, 294 }, { 290, 298 }, { 290, 366 }, { 291, 295 }, { 291, 299 },
1225 { 291, 367 }, { 292, 296 }, { 292, 300 }, { 292, 368 }, { 293, 297 },
1226 { 293, 301 }, { 293, 369 }, { 294, 302 }, { 294, 370 }, { 295, 303 },
1227 { 295, 371 }, { 296, 304 }, { 296, 376 }, { 297, 305 }, { 297, 377 },
1228 { 298, 306 }, { 298, 378 }, { 299, 307 }, { 299, 379 }, { 300, 308 },
1229 { 300, 380 }, { 301, 309 }, { 301, 381 }, { 302, 306 }, { 302, 382 },
1230 { 303, 307 }, { 303, 383 }, { 304, 308 }, { 304, 388 }, { 305, 309 },
1231 { 305, 389 }, { 306, 390 }, { 307, 391 }, { 308, 392 }, { 309, 393 },
1232 { 310, 312 }, { 310, 314 }, { 310, 384 }, { 311, 313 }, { 311, 315 },
1233 { 311, 385 }, { 312, 316 }, { 312, 386 }, { 313, 317 }, { 313, 387 },
1234 { 314, 319 }, { 314, 395 }, { 315, 320 }, { 315, 396 }, { 316, 319 },
1235 { 316, 397 }, { 317, 320 }, { 317, 398 }, { 318, 322 }, { 318, 323 },
1236 { 318, 394 }, { 319, 404 }, { 320, 405 }, { 321, 324 }, { 321, 325 },
1237 { 321, 399 }, { 322, 326 }, { 322, 400 }, { 323, 327 }, { 323, 401 },
1238 { 324, 328 }, { 324, 402 }, { 325, 329 }, { 325, 403 }, { 326, 327 },
1239 { 326, 406 }, { 327, 407 }, { 328, 329 }, { 328, 408 }, { 329, 409 },
1240 { 330, 350 }, { 330, 352 }, { 330, 354 }, { 331, 351 }, { 331, 353 },
1241 { 331, 355 }, { 332, 356 }, { 332, 361 }, { 332, 366 }, { 333, 357 },
1242 { 333, 362 }, { 333, 367 }, { 334, 358 }, { 334, 363 }, { 334, 368 },
1243 { 335, 359 }, { 335, 364 }, { 335, 369 }, { 336, 360 }, { 336, 370 },
1244 { 336, 371 }, { 337, 365 }, { 337, 376 }, { 337, 377 }, { 338, 372 },
1245 { 338, 378 }, { 338, 384 }, { 339, 373 }, { 339, 379 }, { 339, 385 },
1246 { 340, 374 }, { 340, 380 }, { 340, 386 }, { 341, 375 }, { 341, 381 },
1247 { 341, 387 }, { 342, 382 }, { 342, 383 }, { 342, 394 }, { 343, 388 },
1248 { 343, 389 }, { 343, 399 }, { 344, 390 }, { 344, 395 }, { 344, 400 },
1249 { 345, 391 }, { 345, 396 }, { 345, 401 }, { 346, 392 }, { 346, 397 },
1250 { 346, 402 }, { 347, 393 }, { 347, 398 }, { 347, 403 }, { 348, 404 },
1251 { 348, 406 }, { 348, 408 }, { 349, 405 }, { 349, 407 }, { 349, 409 },
1252 { 350, 410 }, { 350, 412 }, { 351, 410 }, { 351, 413 }, { 352, 411 },
1253 { 352, 414 }, { 353, 411 }, { 353, 415 }, { 354, 416 }, { 354, 418 },
1254 { 355, 417 }, { 355, 419 }, { 356, 412 }, { 356, 420 }, { 357, 413 },
1255 { 357, 421 }, { 358, 414 }, { 358, 422 }, { 359, 415 }, { 359, 423 },
1256 { 360, 420 }, { 360, 421 }, { 361, 416 }, { 361, 426 }, { 362, 417 },
1257 { 362, 427 }, { 363, 418 }, { 363, 428 }, { 364, 419 }, { 364, 429 },
1258 { 365, 422 }, { 365, 423 }, { 366, 424 }, { 366, 432 }, { 367, 425 },
1259 { 367, 433 }, { 368, 430 }, { 368, 434 }, { 369, 431 }, { 369, 435 },
1260 { 370, 424 }, { 370, 438 }, { 371, 425 }, { 371, 439 }, { 372, 426 },
1261 { 372, 436 }, { 373, 427 }, { 373, 437 }, { 374, 428 }, { 374, 436 },
1262 { 375, 429 }, { 375, 437 }, { 376, 430 }, { 376, 440 }, { 377, 431 },
1263 { 377, 441 }, { 378, 432 }, { 378, 444 }, { 379, 433 }, { 379, 445 },
1264 { 380, 434 }, { 380, 446 }, { 381, 435 }, { 381, 447 }, { 382, 438 },
1265 { 382, 448 }, { 383, 439 }, { 383, 449 }, { 384, 442 }, { 384, 450 },
1266 { 385, 443 }, { 385, 451 }, { 386, 442 }, { 386, 452 }, { 387, 443 },
1267 { 387, 453 }, { 388, 440 }, { 388, 454 }, { 389, 441 }, { 389, 455 },
1268 { 390, 444 }, { 390, 448 }, { 391, 445 }, { 391, 449 }, { 392, 446 },
1269 { 392, 454 }, { 393, 447 }, { 393, 455 }, { 394, 456 }, { 394, 457 },
1270 { 395, 450 }, { 395, 460 }, { 396, 451 }, { 396, 461 }, { 397, 452 },
1271 { 397, 462 }, { 398, 453 }, { 398, 463 }, { 399, 458 }, { 399, 459 },
1272 { 400, 456 }, { 400, 464 }, { 401, 457 }, { 401, 465 }, { 402, 458 },
1273 { 402, 466 }, { 403, 459 }, { 403, 467 }, { 404, 460 }, { 404, 462 },
1274 { 405, 461 }, { 405, 463 }, { 406, 464 }, { 406, 468 }, { 407, 465 },
1275 { 407, 468 }, { 408, 466 }, { 408, 469 }, { 409, 467 }, { 409, 469 },
1276 { 410, 411 }, { 410, 470 }, { 411, 471 }, { 412, 416 }, { 412, 472 },
1277 { 413, 417 }, { 413, 473 }, { 414, 418 }, { 414, 474 }, { 415, 419 },
1278 { 415, 475 }, { 416, 478 }, { 417, 479 }, { 418, 480 }, { 419, 481 },
1279 { 420, 424 }, { 420, 476 }, { 421, 425 }, { 421, 477 }, { 422, 430 },
1280 { 422, 482 }, { 423, 431 }, { 423, 483 }, { 424, 488 }, { 425, 489 },
1281 { 426, 432 }, { 426, 484 }, { 427, 433 }, { 427, 485 }, { 428, 434 },
1282 { 428, 486 }, { 429, 435 }, { 429, 487 }, { 430, 492 }, { 431, 493 },
1283 { 432, 494 }, { 433, 495 }, { 434, 496 }, { 435, 497 }, { 436, 442 },
1284 { 436, 490 }, { 437, 443 }, { 437, 491 }, { 438, 439 }, { 438, 498 },
1285 { 439, 499 }, { 440, 441 }, { 440, 500 }, { 441, 501 }, { 442, 508 },
1286 { 443, 509 }, { 444, 450 }, { 444, 502 }, { 445, 451 }, { 445, 503 },
1287 { 446, 452 }, { 446, 504 }, { 447, 453 }, { 447, 505 }, { 448, 456 },
1288 { 448, 506 }, { 449, 457 }, { 449, 507 }, { 450, 512 }, { 451, 513 },
1289 { 452, 514 }, { 453, 515 }, { 454, 458 }, { 454, 510 }, { 455, 459 },
1290 { 455, 511 }, { 456, 516 }, { 457, 517 }, { 458, 522 }, { 459, 523 },
1291 { 460, 464 }, { 460, 518 }, { 461, 465 }, { 461, 519 }, { 462, 466 },
1292 { 462, 520 }, { 463, 467 }, { 463, 521 }, { 464, 524 }, { 465, 525 },
1293 { 466, 526 }, { 467, 527 }, { 468, 469 }, { 468, 528 }, { 469, 529 },
1294 { 470, 472 }, { 470, 473 }, { 470, 530 }, { 471, 474 }, { 471, 475 },
1295 { 471, 530 }, { 472, 476 }, { 472, 531 }, { 473, 477 }, { 473, 532 },
1296 { 474, 482 }, { 474, 533 }, { 475, 483 }, { 475, 534 }, { 476, 477 },
1297 { 476, 535 }, { 477, 536 }, { 478, 480 }, { 478, 484 }, { 478, 531 },
1298 { 479, 481 }, { 479, 485 }, { 479, 532 }, { 480, 486 }, { 480, 533 },
1299 { 481, 487 }, { 481, 534 }, { 482, 483 }, { 482, 537 }, { 483, 538 },
1300 { 484, 490 }, { 484, 539 }, { 485, 491 }, { 485, 540 }, { 486, 490 },
1301 { 486, 541 }, { 487, 491 }, { 487, 542 }, { 488, 494 }, { 488, 498 },
1302 { 488, 535 }, { 489, 495 }, { 489, 499 }, { 489, 536 }, { 490, 544 },
1303 { 491, 545 }, { 492, 496 }, { 492, 500 }, { 492, 537 }, { 493, 497 },
1304 { 493, 501 }, { 493, 538 }, { 494, 502 }, { 494, 539 }, { 495, 503 },
1305 { 495, 540 }, { 496, 504 }, { 496, 541 }, { 497, 505 }, { 497, 542 },
1306 { 498, 506 }, { 498, 543 }, { 499, 507 }, { 499, 543 }, { 500, 510 },
1307 { 500, 546 }, { 501, 511 }, { 501, 546 }, { 502, 506 }, { 502, 547 },
1308 { 503, 507 }, { 503, 548 }, { 504, 510 }, { 504, 549 }, { 505, 511 },
1309 { 505, 550 }, { 506, 551 }, { 507, 552 }, { 508, 512 }, { 508, 514 },
1310 { 508, 544 }, { 509, 513 }, { 509, 515 }, { 509, 545 }, { 510, 553 },
1311 { 511, 554 }, { 512, 518 }, { 512, 547 }, { 513, 519 }, { 513, 548 },
1312 { 514, 520 }, { 514, 549 }, { 515, 521 }, { 515, 550 }, { 516, 517 },
1313 { 516, 524 }, { 516, 551 }, { 517, 525 }, { 517, 552 }, { 518, 520 },
1314 { 518, 555 }, { 519, 521 }, { 519, 556 }, { 520, 557 }, { 521, 558 },
1315 { 522, 523 }, { 522, 526 }, { 522, 553 }, { 523, 527 }, { 523, 554 },
1316 { 524, 528 }, { 524, 555 }, { 525, 528 }, { 525, 556 }, { 526, 529 },
1317 { 526, 557 }, { 527, 529 }, { 527, 558 }, { 528, 559 }, { 529, 559 },
1318 { 530, 560 }, { 530, 561 }, { 531, 560 }, { 531, 562 }, { 532, 561 },
1319 { 532, 563 }, { 533, 560 }, { 533, 564 }, { 534, 561 }, { 534, 565 },
1320 { 535, 562 }, { 535, 566 }, { 536, 563 }, { 536, 566 }, { 537, 564 },
1321 { 537, 567 }, { 538, 565 }, { 538, 567 }, { 539, 562 }, { 539, 568 },
1322 { 540, 563 }, { 540, 569 }, { 541, 564 }, { 541, 570 }, { 542, 565 },
1323 { 542, 571 }, { 543, 566 }, { 543, 572 }, { 544, 568 }, { 544, 570 },
1324 { 545, 569 }, { 545, 571 }, { 546, 567 }, { 546, 573 }, { 547, 568 },
1325 { 547, 574 }, { 548, 569 }, { 548, 575 }, { 549, 570 }, { 549, 576 },
1326 { 550, 571 }, { 550, 577 }, { 551, 572 }, { 551, 574 }, { 552, 572 },
1327 { 552, 575 }, { 553, 573 }, { 553, 576 }, { 554, 573 }, { 554, 577 },
1328 { 555, 574 }, { 555, 578 }, { 556, 575 }, { 556, 579 }, { 557, 576 },
1329 { 557, 578 }, { 558, 577 }, { 558, 579 }, { 559, 578 }, { 559, 579 },
1330 { 560, 580 }, { 561, 581 }, { 562, 582 }, { 563, 583 }, { 564, 584 },
1331 { 565, 585 }, { 566, 586 }, { 567, 587 }, { 568, 588 }, { 569, 589 },
1332 { 570, 590 }, { 571, 591 }, { 572, 592 }, { 573, 593 }, { 574, 594 },
1333 { 575, 595 }, { 576, 596 }, { 577, 597 }, { 578, 598 }, { 579, 599 },
1334 { 580, 581 }, { 580, 582 }, { 580, 584 }, { 581, 583 }, { 581, 585 },
1335 { 582, 586 }, { 582, 588 }, { 583, 586 }, { 583, 589 }, { 584, 587 },
1336 { 584, 590 }, { 585, 587 }, { 585, 591 }, { 586, 592 }, { 587, 593 },
1337 { 588, 590 }, { 588, 594 }, { 589, 591 }, { 589, 595 }, { 590, 596 },
1338 { 591, 597 }, { 592, 594 }, { 592, 595 }, { 593, 596 }, { 593, 597 },
1339 { 594, 598 }, { 595, 599 }, { 596, 598 }, { 597, 599 }, { 598, 599 }
1342 static int face_120[NUM_FACE_120][VERT_PER_FACE_120] = {
1343 { 0, 1, 3, 6, 2 }, { 0, 1, 5, 7, 4 },
1344 { 0, 1, 21, 40, 20 }, { 0, 2, 8, 10, 4 },
1345 { 0, 2, 22, 41, 20 }, { 0, 4, 24, 43, 20 },
1346 { 1, 3, 9, 11, 5 }, { 1, 3, 23, 42, 21 },
1347 { 1, 5, 25, 44, 21 }, { 2, 6, 12, 14, 8 },
1348 { 2, 6, 26, 45, 22 }, { 2, 8, 28, 49, 22 },
1349 { 3, 6, 12, 15, 9 }, { 3, 6, 26, 46, 23 },
1350 { 3, 9, 29, 50, 23 }, { 4, 7, 13, 16, 10 },
1351 { 4, 7, 27, 47, 24 }, { 4, 10, 30, 51, 24 },
1352 { 5, 7, 13, 17, 11 }, { 5, 7, 27, 48, 25 },
1353 { 5, 11, 31, 52, 25 }, { 6, 12, 32, 53, 26 },
1354 { 7, 13, 33, 56, 27 }, { 8, 10, 16, 18, 14 },
1355 { 8, 10, 30, 54, 28 }, { 8, 14, 34, 57, 28 },
1356 { 9, 11, 17, 19, 15 }, { 9, 11, 31, 55, 29 },
1357 { 9, 15, 35, 58, 29 }, { 10, 16, 36, 59, 30 },
1358 { 11, 17, 37, 60, 31 }, { 12, 14, 18, 19, 15 },
1359 { 12, 14, 34, 61, 32 }, { 12, 15, 35, 62, 32 },
1360 { 13, 16, 18, 19, 17 }, { 13, 16, 36, 63, 33 },
1361 { 13, 17, 37, 64, 33 }, { 14, 18, 38, 65, 34 },
1362 { 15, 19, 39, 66, 35 }, { 16, 18, 38, 67, 36 },
1363 { 17, 19, 39, 68, 37 }, { 18, 19, 39, 69, 38 },
1364 { 20, 40, 70, 72, 41 }, { 20, 40, 71, 74, 43 },
1365 { 20, 41, 78, 80, 43 }, { 21, 40, 70, 73, 42 },
1366 { 21, 40, 71, 75, 44 }, { 21, 42, 79, 81, 44 },
1367 { 22, 41, 72, 76, 45 }, { 22, 41, 78, 84, 49 },
1368 { 22, 45, 88, 94, 49 }, { 23, 42, 73, 77, 46 },
1369 { 23, 42, 79, 85, 50 }, { 23, 46, 89, 95, 50 },
1370 { 24, 43, 74, 82, 47 }, { 24, 43, 80, 86, 51 },
1371 { 24, 47, 92, 96, 51 }, { 25, 44, 75, 83, 48 },
1372 { 25, 44, 81, 87, 52 }, { 25, 48, 93, 97, 52 },
1373 { 26, 45, 76, 77, 46 }, { 26, 45, 88, 98, 53 },
1374 { 26, 46, 89, 99, 53 }, { 27, 47, 82, 83, 48 },
1375 { 27, 47, 92, 100, 56 }, { 27, 48, 93, 101, 56 },
1376 { 28, 49, 84, 90, 54 }, { 28, 49, 94, 102, 57 },
1377 { 28, 54, 108, 112, 57 }, { 29, 50, 85, 91, 55 },
1378 { 29, 50, 95, 103, 58 }, { 29, 55, 109, 113, 58 },
1379 { 30, 51, 86, 90, 54 }, { 30, 51, 96, 104, 59 },
1380 { 30, 54, 108, 114, 59 }, { 31, 52, 87, 91, 55 },
1381 { 31, 52, 97, 105, 60 }, { 31, 55, 109, 115, 60 },
1382 { 32, 53, 98, 106, 61 }, { 32, 53, 99, 107, 62 },
1383 { 32, 61, 116, 117, 62 }, { 33, 56, 100, 110, 63 },
1384 { 33, 56, 101, 111, 64 }, { 33, 63, 122, 123, 64 },
1385 { 34, 57, 102, 106, 61 }, { 34, 57, 112, 118, 65 },
1386 { 34, 61, 116, 124, 65 }, { 35, 58, 103, 107, 62 },
1387 { 35, 58, 113, 119, 66 }, { 35, 62, 117, 125, 66 },
1388 { 36, 59, 104, 110, 63 }, { 36, 59, 114, 120, 67 },
1389 { 36, 63, 122, 126, 67 }, { 37, 60, 105, 111, 64 },
1390 { 37, 60, 115, 121, 68 }, { 37, 64, 123, 127, 68 },
1391 { 38, 65, 118, 120, 67 }, { 38, 65, 124, 128, 69 },
1392 { 38, 67, 126, 129, 69 }, { 39, 66, 119, 121, 68 },
1393 { 39, 66, 125, 128, 69 }, { 39, 68, 127, 129, 69 },
1394 { 40, 70, 130, 131, 71 }, { 41, 72, 132, 136, 78 },
1395 { 42, 73, 133, 137, 79 }, { 43, 74, 134, 138, 80 },
1396 { 44, 75, 135, 139, 81 }, { 45, 76, 140, 144, 88 },
1397 { 46, 77, 141, 145, 89 }, { 47, 82, 142, 150, 92 },
1398 { 48, 83, 143, 151, 93 }, { 49, 84, 146, 152, 94 },
1399 { 50, 85, 147, 153, 95 }, { 51, 86, 148, 154, 96 },
1400 { 52, 87, 149, 155, 97 }, { 53, 98, 158, 159, 99 },
1401 { 54, 90, 156, 162, 108 }, { 55, 91, 157, 163, 109 },
1402 { 56, 100, 160, 161, 101 }, { 57, 102, 164, 170, 112 },
1403 { 58, 103, 165, 171, 113 }, { 59, 104, 166, 172, 114 },
1404 { 60, 105, 167, 173, 115 }, { 61, 106, 168, 176, 116 },
1405 { 62, 107, 169, 177, 117 }, { 63, 110, 174, 178, 122 },
1406 { 64, 111, 175, 179, 123 }, { 65, 118, 180, 184, 124 },
1407 { 66, 119, 181, 185, 125 }, { 67, 120, 182, 186, 126 },
1408 { 68, 121, 183, 187, 127 }, { 69, 128, 188, 189, 129 },
1409 { 70, 72, 76, 77, 73 }, { 70, 72, 132, 190, 130 },
1410 { 70, 73, 133, 191, 130 }, { 71, 74, 82, 83, 75 },
1411 { 71, 74, 134, 192, 131 }, { 71, 75, 135, 193, 131 },
1412 { 72, 76, 140, 196, 132 }, { 73, 77, 141, 197, 133 },
1413 { 74, 82, 142, 198, 134 }, { 75, 83, 143, 199, 135 },
1414 { 76, 77, 141, 200, 140 }, { 78, 80, 86, 90, 84 },
1415 { 78, 80, 138, 194, 136 }, { 78, 84, 146, 201, 136 },
1416 { 79, 81, 87, 91, 85 }, { 79, 81, 139, 195, 137 },
1417 { 79, 85, 147, 202, 137 }, { 80, 86, 148, 203, 138 },
1418 { 81, 87, 149, 204, 139 }, { 82, 83, 143, 205, 142 },
1419 { 84, 90, 156, 212, 146 }, { 85, 91, 157, 213, 147 },
1420 { 86, 90, 156, 214, 148 }, { 87, 91, 157, 215, 149 },
1421 { 88, 94, 102, 106, 98 }, { 88, 94, 152, 206, 144 },
1422 { 88, 98, 158, 210, 144 }, { 89, 95, 103, 107, 99 },
1423 { 89, 95, 153, 207, 145 }, { 89, 99, 159, 211, 145 },
1424 { 92, 96, 104, 110, 100 }, { 92, 96, 154, 208, 150 },
1425 { 92, 100, 160, 216, 150 }, { 93, 97, 105, 111, 101 },
1426 { 93, 97, 155, 209, 151 }, { 93, 101, 161, 217, 151 },
1427 { 94, 102, 164, 218, 152 }, { 95, 103, 165, 219, 153 },
1428 { 96, 104, 166, 220, 154 }, { 97, 105, 167, 221, 155 },
1429 { 98, 106, 168, 222, 158 }, { 99, 107, 169, 223, 159 },
1430 { 100, 110, 174, 228, 160 }, { 101, 111, 175, 229, 161 },
1431 { 102, 106, 168, 230, 164 }, { 103, 107, 169, 231, 165 },
1432 { 104, 110, 174, 232, 166 }, { 105, 111, 175, 233, 167 },
1433 { 108, 112, 118, 120, 114 }, { 108, 112, 170, 224, 162 },
1434 { 108, 114, 172, 226, 162 }, { 109, 113, 119, 121, 115 },
1435 { 109, 113, 171, 225, 163 }, { 109, 115, 173, 227, 163 },
1436 { 112, 118, 180, 235, 170 }, { 113, 119, 181, 236, 171 },
1437 { 114, 120, 182, 237, 172 }, { 115, 121, 183, 238, 173 },
1438 { 116, 117, 125, 128, 124 }, { 116, 117, 177, 234, 176 },
1439 { 116, 124, 184, 240, 176 }, { 117, 125, 185, 241, 177 },
1440 { 118, 120, 182, 244, 180 }, { 119, 121, 183, 245, 181 },
1441 { 122, 123, 127, 129, 126 }, { 122, 123, 179, 239, 178 },
1442 { 122, 126, 186, 242, 178 }, { 123, 127, 187, 243, 179 },
1443 { 124, 128, 188, 246, 184 }, { 125, 128, 188, 247, 185 },
1444 { 126, 129, 189, 248, 186 }, { 127, 129, 189, 249, 187 },
1445 { 130, 131, 192, 250, 190 }, { 130, 131, 193, 251, 191 },
1446 { 130, 190, 270, 271, 191 }, { 131, 192, 272, 273, 193 },
1447 { 132, 136, 194, 250, 190 }, { 132, 136, 201, 252, 196 },
1448 { 132, 190, 270, 274, 196 }, { 133, 137, 195, 251, 191 },
1449 { 133, 137, 202, 253, 197 }, { 133, 191, 271, 275, 197 },
1450 { 134, 138, 194, 250, 192 }, { 134, 138, 203, 254, 198 },
1451 { 134, 192, 272, 276, 198 }, { 135, 139, 195, 251, 193 },
1452 { 135, 139, 204, 255, 199 }, { 135, 193, 273, 277, 199 },
1453 { 136, 194, 279, 282, 201 }, { 137, 195, 280, 283, 202 },
1454 { 138, 194, 279, 284, 203 }, { 139, 195, 280, 285, 204 },
1455 { 140, 144, 206, 252, 196 }, { 140, 144, 210, 256, 200 },
1456 { 140, 196, 274, 278, 200 }, { 141, 145, 207, 253, 197 },
1457 { 141, 145, 211, 256, 200 }, { 141, 197, 275, 278, 200 },
1458 { 142, 150, 208, 254, 198 }, { 142, 150, 216, 257, 205 },
1459 { 142, 198, 276, 281, 205 }, { 143, 151, 209, 255, 199 },
1460 { 143, 151, 217, 257, 205 }, { 143, 199, 277, 281, 205 },
1461 { 144, 206, 290, 294, 210 }, { 145, 207, 291, 295, 211 },
1462 { 146, 152, 206, 252, 201 }, { 146, 152, 218, 258, 212 },
1463 { 146, 201, 282, 286, 212 }, { 147, 153, 207, 253, 202 },
1464 { 147, 153, 219, 259, 213 }, { 147, 202, 283, 287, 213 },
1465 { 148, 154, 208, 254, 203 }, { 148, 154, 220, 260, 214 },
1466 { 148, 203, 284, 288, 214 }, { 149, 155, 209, 255, 204 },
1467 { 149, 155, 221, 261, 215 }, { 149, 204, 285, 289, 215 },
1468 { 150, 208, 292, 296, 216 }, { 151, 209, 293, 297, 217 },
1469 { 152, 206, 290, 298, 218 }, { 153, 207, 291, 299, 219 },
1470 { 154, 208, 292, 300, 220 }, { 155, 209, 293, 301, 221 },
1471 { 156, 162, 224, 258, 212 }, { 156, 162, 226, 260, 214 },
1472 { 156, 212, 286, 288, 214 }, { 157, 163, 225, 259, 213 },
1473 { 157, 163, 227, 261, 215 }, { 157, 213, 287, 289, 215 },
1474 { 158, 159, 211, 256, 210 }, { 158, 159, 223, 262, 222 },
1475 { 158, 210, 294, 302, 222 }, { 159, 211, 295, 303, 223 },
1476 { 160, 161, 217, 257, 216 }, { 160, 161, 229, 263, 228 },
1477 { 160, 216, 296, 304, 228 }, { 161, 217, 297, 305, 229 },
1478 { 162, 224, 310, 312, 226 }, { 163, 225, 311, 313, 227 },
1479 { 164, 170, 224, 258, 218 }, { 164, 170, 235, 264, 230 },
1480 { 164, 218, 298, 306, 230 }, { 165, 171, 225, 259, 219 },
1481 { 165, 171, 236, 265, 231 }, { 165, 219, 299, 307, 231 },
1482 { 166, 172, 226, 260, 220 }, { 166, 172, 237, 266, 232 },
1483 { 166, 220, 300, 308, 232 }, { 167, 173, 227, 261, 221 },
1484 { 167, 173, 238, 267, 233 }, { 167, 221, 301, 309, 233 },
1485 { 168, 176, 234, 262, 222 }, { 168, 176, 240, 264, 230 },
1486 { 168, 222, 302, 306, 230 }, { 169, 177, 234, 262, 223 },
1487 { 169, 177, 241, 265, 231 }, { 169, 223, 303, 307, 231 },
1488 { 170, 224, 310, 314, 235 }, { 171, 225, 311, 315, 236 },
1489 { 172, 226, 312, 316, 237 }, { 173, 227, 313, 317, 238 },
1490 { 174, 178, 239, 263, 228 }, { 174, 178, 242, 266, 232 },
1491 { 174, 228, 304, 308, 232 }, { 175, 179, 239, 263, 229 },
1492 { 175, 179, 243, 267, 233 }, { 175, 229, 305, 309, 233 },
1493 { 176, 234, 318, 322, 240 }, { 177, 234, 318, 323, 241 },
1494 { 178, 239, 321, 324, 242 }, { 179, 239, 321, 325, 243 },
1495 { 180, 184, 240, 264, 235 }, { 180, 184, 246, 268, 244 },
1496 { 180, 235, 314, 319, 244 }, { 181, 185, 241, 265, 236 },
1497 { 181, 185, 247, 269, 245 }, { 181, 236, 315, 320, 245 },
1498 { 182, 186, 242, 266, 237 }, { 182, 186, 248, 268, 244 },
1499 { 182, 237, 316, 319, 244 }, { 183, 187, 243, 267, 238 },
1500 { 183, 187, 249, 269, 245 }, { 183, 238, 317, 320, 245 },
1501 { 184, 240, 322, 326, 246 }, { 185, 241, 323, 327, 247 },
1502 { 186, 242, 324, 328, 248 }, { 187, 243, 325, 329, 249 },
1503 { 188, 189, 248, 268, 246 }, { 188, 189, 249, 269, 247 },
1504 { 188, 246, 326, 327, 247 }, { 189, 248, 328, 329, 249 },
1505 { 190, 250, 330, 350, 270 }, { 191, 251, 331, 351, 271 },
1506 { 192, 250, 330, 352, 272 }, { 193, 251, 331, 353, 273 },
1507 { 194, 250, 330, 354, 279 }, { 195, 251, 331, 355, 280 },
1508 { 196, 252, 332, 356, 274 }, { 197, 253, 333, 357, 275 },
1509 { 198, 254, 334, 358, 276 }, { 199, 255, 335, 359, 277 },
1510 { 200, 256, 336, 360, 278 }, { 201, 252, 332, 361, 282 },
1511 { 202, 253, 333, 362, 283 }, { 203, 254, 334, 363, 284 },
1512 { 204, 255, 335, 364, 285 }, { 205, 257, 337, 365, 281 },
1513 { 206, 252, 332, 366, 290 }, { 207, 253, 333, 367, 291 },
1514 { 208, 254, 334, 368, 292 }, { 209, 255, 335, 369, 293 },
1515 { 210, 256, 336, 370, 294 }, { 211, 256, 336, 371, 295 },
1516 { 212, 258, 338, 372, 286 }, { 213, 259, 339, 373, 287 },
1517 { 214, 260, 340, 374, 288 }, { 215, 261, 341, 375, 289 },
1518 { 216, 257, 337, 376, 296 }, { 217, 257, 337, 377, 297 },
1519 { 218, 258, 338, 378, 298 }, { 219, 259, 339, 379, 299 },
1520 { 220, 260, 340, 380, 300 }, { 221, 261, 341, 381, 301 },
1521 { 222, 262, 342, 382, 302 }, { 223, 262, 342, 383, 303 },
1522 { 224, 258, 338, 384, 310 }, { 225, 259, 339, 385, 311 },
1523 { 226, 260, 340, 386, 312 }, { 227, 261, 341, 387, 313 },
1524 { 228, 263, 343, 388, 304 }, { 229, 263, 343, 389, 305 },
1525 { 230, 264, 344, 390, 306 }, { 231, 265, 345, 391, 307 },
1526 { 232, 266, 346, 392, 308 }, { 233, 267, 347, 393, 309 },
1527 { 234, 262, 342, 394, 318 }, { 235, 264, 344, 395, 314 },
1528 { 236, 265, 345, 396, 315 }, { 237, 266, 346, 397, 316 },
1529 { 238, 267, 347, 398, 317 }, { 239, 263, 343, 399, 321 },
1530 { 240, 264, 344, 400, 322 }, { 241, 265, 345, 401, 323 },
1531 { 242, 266, 346, 402, 324 }, { 243, 267, 347, 403, 325 },
1532 { 244, 268, 348, 404, 319 }, { 245, 269, 349, 405, 320 },
1533 { 246, 268, 348, 406, 326 }, { 247, 269, 349, 407, 327 },
1534 { 248, 268, 348, 408, 328 }, { 249, 269, 349, 409, 329 },
1535 { 270, 271, 275, 278, 274 }, { 270, 271, 351, 410, 350 },
1536 { 270, 274, 356, 412, 350 }, { 271, 275, 357, 413, 351 },
1537 { 272, 273, 277, 281, 276 }, { 272, 273, 353, 411, 352 },
1538 { 272, 276, 358, 414, 352 }, { 273, 277, 359, 415, 353 },
1539 { 274, 278, 360, 420, 356 }, { 275, 278, 360, 421, 357 },
1540 { 276, 281, 365, 422, 358 }, { 277, 281, 365, 423, 359 },
1541 { 279, 282, 286, 288, 284 }, { 279, 282, 361, 416, 354 },
1542 { 279, 284, 363, 418, 354 }, { 280, 283, 287, 289, 285 },
1543 { 280, 283, 362, 417, 355 }, { 280, 285, 364, 419, 355 },
1544 { 282, 286, 372, 426, 361 }, { 283, 287, 373, 427, 362 },
1545 { 284, 288, 374, 428, 363 }, { 285, 289, 375, 429, 364 },
1546 { 286, 288, 374, 436, 372 }, { 287, 289, 375, 437, 373 },
1547 { 290, 294, 302, 306, 298 }, { 290, 294, 370, 424, 366 },
1548 { 290, 298, 378, 432, 366 }, { 291, 295, 303, 307, 299 },
1549 { 291, 295, 371, 425, 367 }, { 291, 299, 379, 433, 367 },
1550 { 292, 296, 304, 308, 300 }, { 292, 296, 376, 430, 368 },
1551 { 292, 300, 380, 434, 368 }, { 293, 297, 305, 309, 301 },
1552 { 293, 297, 377, 431, 369 }, { 293, 301, 381, 435, 369 },
1553 { 294, 302, 382, 438, 370 }, { 295, 303, 383, 439, 371 },
1554 { 296, 304, 388, 440, 376 }, { 297, 305, 389, 441, 377 },
1555 { 298, 306, 390, 444, 378 }, { 299, 307, 391, 445, 379 },
1556 { 300, 308, 392, 446, 380 }, { 301, 309, 393, 447, 381 },
1557 { 302, 306, 390, 448, 382 }, { 303, 307, 391, 449, 383 },
1558 { 304, 308, 392, 454, 388 }, { 305, 309, 393, 455, 389 },
1559 { 310, 312, 316, 319, 314 }, { 310, 312, 386, 442, 384 },
1560 { 310, 314, 395, 450, 384 }, { 311, 313, 317, 320, 315 },
1561 { 311, 313, 387, 443, 385 }, { 311, 315, 396, 451, 385 },
1562 { 312, 316, 397, 452, 386 }, { 313, 317, 398, 453, 387 },
1563 { 314, 319, 404, 460, 395 }, { 315, 320, 405, 461, 396 },
1564 { 316, 319, 404, 462, 397 }, { 317, 320, 405, 463, 398 },
1565 { 318, 322, 326, 327, 323 }, { 318, 322, 400, 456, 394 },
1566 { 318, 323, 401, 457, 394 }, { 321, 324, 328, 329, 325 },
1567 { 321, 324, 402, 458, 399 }, { 321, 325, 403, 459, 399 },
1568 { 322, 326, 406, 464, 400 }, { 323, 327, 407, 465, 401 },
1569 { 324, 328, 408, 466, 402 }, { 325, 329, 409, 467, 403 },
1570 { 326, 327, 407, 468, 406 }, { 328, 329, 409, 469, 408 },
1571 { 330, 350, 410, 411, 352 }, { 330, 350, 412, 416, 354 },
1572 { 330, 352, 414, 418, 354 }, { 331, 351, 410, 411, 353 },
1573 { 331, 351, 413, 417, 355 }, { 331, 353, 415, 419, 355 },
1574 { 332, 356, 412, 416, 361 }, { 332, 356, 420, 424, 366 },
1575 { 332, 361, 426, 432, 366 }, { 333, 357, 413, 417, 362 },
1576 { 333, 357, 421, 425, 367 }, { 333, 362, 427, 433, 367 },
1577 { 334, 358, 414, 418, 363 }, { 334, 358, 422, 430, 368 },
1578 { 334, 363, 428, 434, 368 }, { 335, 359, 415, 419, 364 },
1579 { 335, 359, 423, 431, 369 }, { 335, 364, 429, 435, 369 },
1580 { 336, 360, 420, 424, 370 }, { 336, 360, 421, 425, 371 },
1581 { 336, 370, 438, 439, 371 }, { 337, 365, 422, 430, 376 },
1582 { 337, 365, 423, 431, 377 }, { 337, 376, 440, 441, 377 },
1583 { 338, 372, 426, 432, 378 }, { 338, 372, 436, 442, 384 },
1584 { 338, 378, 444, 450, 384 }, { 339, 373, 427, 433, 379 },
1585 { 339, 373, 437, 443, 385 }, { 339, 379, 445, 451, 385 },
1586 { 340, 374, 428, 434, 380 }, { 340, 374, 436, 442, 386 },
1587 { 340, 380, 446, 452, 386 }, { 341, 375, 429, 435, 381 },
1588 { 341, 375, 437, 443, 387 }, { 341, 381, 447, 453, 387 },
1589 { 342, 382, 438, 439, 383 }, { 342, 382, 448, 456, 394 },
1590 { 342, 383, 449, 457, 394 }, { 343, 388, 440, 441, 389 },
1591 { 343, 388, 454, 458, 399 }, { 343, 389, 455, 459, 399 },
1592 { 344, 390, 444, 450, 395 }, { 344, 390, 448, 456, 400 },
1593 { 344, 395, 460, 464, 400 }, { 345, 391, 445, 451, 396 },
1594 { 345, 391, 449, 457, 401 }, { 345, 396, 461, 465, 401 },
1595 { 346, 392, 446, 452, 397 }, { 346, 392, 454, 458, 402 },
1596 { 346, 397, 462, 466, 402 }, { 347, 393, 447, 453, 398 },
1597 { 347, 393, 455, 459, 403 }, { 347, 398, 463, 467, 403 },
1598 { 348, 404, 460, 464, 406 }, { 348, 404, 462, 466, 408 },
1599 { 348, 406, 468, 469, 408 }, { 349, 405, 461, 465, 407 },
1600 { 349, 405, 463, 467, 409 }, { 349, 407, 468, 469, 409 },
1601 { 350, 410, 470, 472, 412 }, { 351, 410, 470, 473, 413 },
1602 { 352, 411, 471, 474, 414 }, { 353, 411, 471, 475, 415 },
1603 { 354, 416, 478, 480, 418 }, { 355, 417, 479, 481, 419 },
1604 { 356, 412, 472, 476, 420 }, { 357, 413, 473, 477, 421 },
1605 { 358, 414, 474, 482, 422 }, { 359, 415, 475, 483, 423 },
1606 { 360, 420, 476, 477, 421 }, { 361, 416, 478, 484, 426 },
1607 { 362, 417, 479, 485, 427 }, { 363, 418, 480, 486, 428 },
1608 { 364, 419, 481, 487, 429 }, { 365, 422, 482, 483, 423 },
1609 { 366, 424, 488, 494, 432 }, { 367, 425, 489, 495, 433 },
1610 { 368, 430, 492, 496, 434 }, { 369, 431, 493, 497, 435 },
1611 { 370, 424, 488, 498, 438 }, { 371, 425, 489, 499, 439 },
1612 { 372, 426, 484, 490, 436 }, { 373, 427, 485, 491, 437 },
1613 { 374, 428, 486, 490, 436 }, { 375, 429, 487, 491, 437 },
1614 { 376, 430, 492, 500, 440 }, { 377, 431, 493, 501, 441 },
1615 { 378, 432, 494, 502, 444 }, { 379, 433, 495, 503, 445 },
1616 { 380, 434, 496, 504, 446 }, { 381, 435, 497, 505, 447 },
1617 { 382, 438, 498, 506, 448 }, { 383, 439, 499, 507, 449 },
1618 { 384, 442, 508, 512, 450 }, { 385, 443, 509, 513, 451 },
1619 { 386, 442, 508, 514, 452 }, { 387, 443, 509, 515, 453 },
1620 { 388, 440, 500, 510, 454 }, { 389, 441, 501, 511, 455 },
1621 { 390, 444, 502, 506, 448 }, { 391, 445, 503, 507, 449 },
1622 { 392, 446, 504, 510, 454 }, { 393, 447, 505, 511, 455 },
1623 { 394, 456, 516, 517, 457 }, { 395, 450, 512, 518, 460 },
1624 { 396, 451, 513, 519, 461 }, { 397, 452, 514, 520, 462 },
1625 { 398, 453, 515, 521, 463 }, { 399, 458, 522, 523, 459 },
1626 { 400, 456, 516, 524, 464 }, { 401, 457, 517, 525, 465 },
1627 { 402, 458, 522, 526, 466 }, { 403, 459, 523, 527, 467 },
1628 { 404, 460, 518, 520, 462 }, { 405, 461, 519, 521, 463 },
1629 { 406, 464, 524, 528, 468 }, { 407, 465, 525, 528, 468 },
1630 { 408, 466, 526, 529, 469 }, { 409, 467, 527, 529, 469 },
1631 { 410, 411, 471, 530, 470 }, { 412, 416, 478, 531, 472 },
1632 { 413, 417, 479, 532, 473 }, { 414, 418, 480, 533, 474 },
1633 { 415, 419, 481, 534, 475 }, { 420, 424, 488, 535, 476 },
1634 { 421, 425, 489, 536, 477 }, { 422, 430, 492, 537, 482 },
1635 { 423, 431, 493, 538, 483 }, { 426, 432, 494, 539, 484 },
1636 { 427, 433, 495, 540, 485 }, { 428, 434, 496, 541, 486 },
1637 { 429, 435, 497, 542, 487 }, { 436, 442, 508, 544, 490 },
1638 { 437, 443, 509, 545, 491 }, { 438, 439, 499, 543, 498 },
1639 { 440, 441, 501, 546, 500 }, { 444, 450, 512, 547, 502 },
1640 { 445, 451, 513, 548, 503 }, { 446, 452, 514, 549, 504 },
1641 { 447, 453, 515, 550, 505 }, { 448, 456, 516, 551, 506 },
1642 { 449, 457, 517, 552, 507 }, { 454, 458, 522, 553, 510 },
1643 { 455, 459, 523, 554, 511 }, { 460, 464, 524, 555, 518 },
1644 { 461, 465, 525, 556, 519 }, { 462, 466, 526, 557, 520 },
1645 { 463, 467, 527, 558, 521 }, { 468, 469, 529, 559, 528 },
1646 { 470, 472, 476, 477, 473 }, { 470, 472, 531, 560, 530 },
1647 { 470, 473, 532, 561, 530 }, { 471, 474, 482, 483, 475 },
1648 { 471, 474, 533, 560, 530 }, { 471, 475, 534, 561, 530 },
1649 { 472, 476, 535, 562, 531 }, { 473, 477, 536, 563, 532 },
1650 { 474, 482, 537, 564, 533 }, { 475, 483, 538, 565, 534 },
1651 { 476, 477, 536, 566, 535 }, { 478, 480, 486, 490, 484 },
1652 { 478, 480, 533, 560, 531 }, { 478, 484, 539, 562, 531 },
1653 { 479, 481, 487, 491, 485 }, { 479, 481, 534, 561, 532 },
1654 { 479, 485, 540, 563, 532 }, { 480, 486, 541, 564, 533 },
1655 { 481, 487, 542, 565, 534 }, { 482, 483, 538, 567, 537 },
1656 { 484, 490, 544, 568, 539 }, { 485, 491, 545, 569, 540 },
1657 { 486, 490, 544, 570, 541 }, { 487, 491, 545, 571, 542 },
1658 { 488, 494, 502, 506, 498 }, { 488, 494, 539, 562, 535 },
1659 { 488, 498, 543, 566, 535 }, { 489, 495, 503, 507, 499 },
1660 { 489, 495, 540, 563, 536 }, { 489, 499, 543, 566, 536 },
1661 { 492, 496, 504, 510, 500 }, { 492, 496, 541, 564, 537 },
1662 { 492, 500, 546, 567, 537 }, { 493, 497, 505, 511, 501 },
1663 { 493, 497, 542, 565, 538 }, { 493, 501, 546, 567, 538 },
1664 { 494, 502, 547, 568, 539 }, { 495, 503, 548, 569, 540 },
1665 { 496, 504, 549, 570, 541 }, { 497, 505, 550, 571, 542 },
1666 { 498, 506, 551, 572, 543 }, { 499, 507, 552, 572, 543 },
1667 { 500, 510, 553, 573, 546 }, { 501, 511, 554, 573, 546 },
1668 { 502, 506, 551, 574, 547 }, { 503, 507, 552, 575, 548 },
1669 { 504, 510, 553, 576, 549 }, { 505, 511, 554, 577, 550 },
1670 { 508, 512, 518, 520, 514 }, { 508, 512, 547, 568, 544 },
1671 { 508, 514, 549, 570, 544 }, { 509, 513, 519, 521, 515 },
1672 { 509, 513, 548, 569, 545 }, { 509, 515, 550, 571, 545 },
1673 { 512, 518, 555, 574, 547 }, { 513, 519, 556, 575, 548 },
1674 { 514, 520, 557, 576, 549 }, { 515, 521, 558, 577, 550 },
1675 { 516, 517, 525, 528, 524 }, { 516, 517, 552, 572, 551 },
1676 { 516, 524, 555, 574, 551 }, { 517, 525, 556, 575, 552 },
1677 { 518, 520, 557, 578, 555 }, { 519, 521, 558, 579, 556 },
1678 { 522, 523, 527, 529, 526 }, { 522, 523, 554, 573, 553 },
1679 { 522, 526, 557, 576, 553 }, { 523, 527, 558, 577, 554 },
1680 { 524, 528, 559, 578, 555 }, { 525, 528, 559, 579, 556 },
1681 { 526, 529, 559, 578, 557 }, { 527, 529, 559, 579, 558 },
1682 { 530, 560, 580, 581, 561 }, { 531, 560, 580, 582, 562 },
1683 { 532, 561, 581, 583, 563 }, { 533, 560, 580, 584, 564 },
1684 { 534, 561, 581, 585, 565 }, { 535, 562, 582, 586, 566 },
1685 { 536, 563, 583, 586, 566 }, { 537, 564, 584, 587, 567 },
1686 { 538, 565, 585, 587, 567 }, { 539, 562, 582, 588, 568 },
1687 { 540, 563, 583, 589, 569 }, { 541, 564, 584, 590, 570 },
1688 { 542, 565, 585, 591, 571 }, { 543, 566, 586, 592, 572 },
1689 { 544, 568, 588, 590, 570 }, { 545, 569, 589, 591, 571 },
1690 { 546, 567, 587, 593, 573 }, { 547, 568, 588, 594, 574 },
1691 { 548, 569, 589, 595, 575 }, { 549, 570, 590, 596, 576 },
1692 { 550, 571, 591, 597, 577 }, { 551, 572, 592, 594, 574 },
1693 { 552, 572, 592, 595, 575 }, { 553, 573, 593, 596, 576 },
1694 { 554, 573, 593, 597, 577 }, { 555, 574, 594, 598, 578 },
1695 { 556, 575, 595, 599, 579 }, { 557, 576, 596, 598, 578 },
1696 { 558, 577, 597, 599, 579 }, { 559, 578, 598, 599, 579 },
1697 { 580, 581, 583, 586, 582 }, { 580, 581, 585, 587, 584 },
1698 { 580, 582, 588, 590, 584 }, { 581, 583, 589, 591, 585 },
1699 { 582, 586, 592, 594, 588 }, { 583, 586, 592, 595, 589 },
1700 { 584, 587, 593, 596, 590 }, { 585, 587, 593, 597, 591 },
1701 { 588, 590, 596, 598, 594 }, { 589, 591, 597, 599, 595 },
1702 { 592, 594, 598, 599, 595 }, { 593, 596, 598, 599, 597 }
1705 static float edge_color_120[NUM_EDGE_120][4];
1706 static float face_color_120[NUM_FACE_120][4];
1707 static float face_color_trans_120[NUM_FACE_120][4];
1710 /* 600-cell {3,3,5} */
1711 #define NUM_VERT_600 120
1712 #define NUM_EDGE_600 720
1713 #define NUM_FACE_600 1200
1714 #define VERT_PER_FACE_600 3
1716 #define MIN_EDGE_DEPTH_600 (-GOLDEN/2.0-1)
1717 #define MAX_EDGE_DEPTH_600 (GOLDEN/2.0+1)
1718 #define MIN_FACE_DEPTH_600 ((-2*GOLDEN-2)/3.0)
1719 #define MAX_FACE_DEPTH_600 ((2*GOLDEN+2)/3.0)
1721 static float vert_600[NUM_VERT_600][4] = {
1722 { 0.0, 0.0, 0.0, -2.0 },
1723 { 0.0, -GOLDENINV, -1.0, -GOLDEN },
1724 { 0.0, GOLDENINV, -1.0, -GOLDEN },
1725 { -1.0, 0.0, -GOLDENINV, -GOLDEN },
1726 { 1.0, 0.0, -GOLDENINV, -GOLDEN },
1727 { -GOLDENINV, -1.0, 0.0, -GOLDEN },
1728 { GOLDENINV, -1.0, 0.0, -GOLDEN },
1729 { -GOLDENINV, 1.0, 0.0, -GOLDEN },
1730 { GOLDENINV, 1.0, 0.0, -GOLDEN },
1731 { -1.0, 0.0, GOLDENINV, -GOLDEN },
1732 { 1.0, 0.0, GOLDENINV, -GOLDEN },
1733 { 0.0, -GOLDENINV, 1.0, -GOLDEN },
1734 { 0.0, GOLDENINV, 1.0, -GOLDEN },
1735 { -GOLDENINV, 0.0, -GOLDEN, -1.0 },
1736 { GOLDENINV, 0.0, -GOLDEN, -1.0 },
1737 { -1.0, -1.0, -1.0, -1.0 },
1738 { 1.0, -1.0, -1.0, -1.0 },
1739 { -1.0, 1.0, -1.0, -1.0 },
1740 { 1.0, 1.0, -1.0, -1.0 },
1741 { 0.0, -GOLDEN, -GOLDENINV, -1.0 },
1742 { 0.0, GOLDEN, -GOLDENINV, -1.0 },
1743 { -GOLDEN, -GOLDENINV, 0.0, -1.0 },
1744 { GOLDEN, -GOLDENINV, 0.0, -1.0 },
1745 { -GOLDEN, GOLDENINV, 0.0, -1.0 },
1746 { GOLDEN, GOLDENINV, 0.0, -1.0 },
1747 { 0.0, -GOLDEN, GOLDENINV, -1.0 },
1748 { 0.0, GOLDEN, GOLDENINV, -1.0 },
1749 { -1.0, -1.0, 1.0, -1.0 },
1750 { 1.0, -1.0, 1.0, -1.0 },
1751 { -1.0, 1.0, 1.0, -1.0 },
1752 { 1.0, 1.0, 1.0, -1.0 },
1753 { -GOLDENINV, 0.0, GOLDEN, -1.0 },
1754 { GOLDENINV, 0.0, GOLDEN, -1.0 },
1755 { 0.0, -1.0, -GOLDEN, -GOLDENINV },
1756 { 0.0, 1.0, -GOLDEN, -GOLDENINV },
1757 { -GOLDEN, 0.0, -1.0, -GOLDENINV },
1758 { GOLDEN, 0.0, -1.0, -GOLDENINV },
1759 { -1.0, -GOLDEN, 0.0, -GOLDENINV },
1760 { 1.0, -GOLDEN, 0.0, -GOLDENINV },
1761 { -1.0, GOLDEN, 0.0, -GOLDENINV },
1762 { 1.0, GOLDEN, 0.0, -GOLDENINV },
1763 { -GOLDEN, 0.0, 1.0, -GOLDENINV },
1764 { GOLDEN, 0.0, 1.0, -GOLDENINV },
1765 { 0.0, -1.0, GOLDEN, -GOLDENINV },
1766 { 0.0, 1.0, GOLDEN, -GOLDENINV },
1767 { 0.0, 0.0, -2.0, 0.0 },
1768 { -1.0, -GOLDENINV, -GOLDEN, 0.0 },
1769 { 1.0, -GOLDENINV, -GOLDEN, 0.0 },
1770 { -1.0, GOLDENINV, -GOLDEN, 0.0 },
1771 { 1.0, GOLDENINV, -GOLDEN, 0.0 },
1772 { -GOLDENINV, -GOLDEN, -1.0, 0.0 },
1773 { GOLDENINV, -GOLDEN, -1.0, 0.0 },
1774 { -GOLDENINV, GOLDEN, -1.0, 0.0 },
1775 { GOLDENINV, GOLDEN, -1.0, 0.0 },
1776 { -GOLDEN, -1.0, -GOLDENINV, 0.0 },
1777 { GOLDEN, -1.0, -GOLDENINV, 0.0 },
1778 { -GOLDEN, 1.0, -GOLDENINV, 0.0 },
1779 { GOLDEN, 1.0, -GOLDENINV, 0.0 },
1780 { 0.0, -2.0, 0.0, 0.0 },
1781 { -2.0, 0.0, 0.0, 0.0 },
1782 { 2.0, 0.0, 0.0, 0.0 },
1783 { 0.0, 2.0, 0.0, 0.0 },
1784 { -GOLDEN, -1.0, GOLDENINV, 0.0 },
1785 { GOLDEN, -1.0, GOLDENINV, 0.0 },
1786 { -GOLDEN, 1.0, GOLDENINV, 0.0 },
1787 { GOLDEN, 1.0, GOLDENINV, 0.0 },
1788 { -GOLDENINV, -GOLDEN, 1.0, 0.0 },
1789 { GOLDENINV, -GOLDEN, 1.0, 0.0 },
1790 { -GOLDENINV, GOLDEN, 1.0, 0.0 },
1791 { GOLDENINV, GOLDEN, 1.0, 0.0 },
1792 { -1.0, -GOLDENINV, GOLDEN, 0.0 },
1793 { 1.0, -GOLDENINV, GOLDEN, 0.0 },
1794 { -1.0, GOLDENINV, GOLDEN, 0.0 },
1795 { 1.0, GOLDENINV, GOLDEN, 0.0 },
1796 { 0.0, 0.0, 2.0, 0.0 },
1797 { 0.0, -1.0, -GOLDEN, GOLDENINV },
1798 { 0.0, 1.0, -GOLDEN, GOLDENINV },
1799 { -GOLDEN, 0.0, -1.0, GOLDENINV },
1800 { GOLDEN, 0.0, -1.0, GOLDENINV },
1801 { -1.0, -GOLDEN, 0.0, GOLDENINV },
1802 { 1.0, -GOLDEN, 0.0, GOLDENINV },
1803 { -1.0, GOLDEN, 0.0, GOLDENINV },
1804 { 1.0, GOLDEN, 0.0, GOLDENINV },
1805 { -GOLDEN, 0.0, 1.0, GOLDENINV },
1806 { GOLDEN, 0.0, 1.0, GOLDENINV },
1807 { 0.0, -1.0, GOLDEN, GOLDENINV },
1808 { 0.0, 1.0, GOLDEN, GOLDENINV },
1809 { -GOLDENINV, 0.0, -GOLDEN, 1.0 },
1810 { GOLDENINV, 0.0, -GOLDEN, 1.0 },
1811 { -1.0, -1.0, -1.0, 1.0 },
1812 { 1.0, -1.0, -1.0, 1.0 },
1813 { -1.0, 1.0, -1.0, 1.0 },
1814 { 1.0, 1.0, -1.0, 1.0 },
1815 { 0.0, -GOLDEN, -GOLDENINV, 1.0 },
1816 { 0.0, GOLDEN, -GOLDENINV, 1.0 },
1817 { -GOLDEN, -GOLDENINV, 0.0, 1.0 },
1818 { GOLDEN, -GOLDENINV, 0.0, 1.0 },
1819 { -GOLDEN, GOLDENINV, 0.0, 1.0 },
1820 { GOLDEN, GOLDENINV, 0.0, 1.0 },
1821 { 0.0, -GOLDEN, GOLDENINV, 1.0 },
1822 { 0.0, GOLDEN, GOLDENINV, 1.0 },
1823 { -1.0, -1.0, 1.0, 1.0 },
1824 { 1.0, -1.0, 1.0, 1.0 },
1825 { -1.0, 1.0, 1.0, 1.0 },
1826 { 1.0, 1.0, 1.0, 1.0 },
1827 { -GOLDENINV, 0.0, GOLDEN, 1.0 },
1828 { GOLDENINV, 0.0, GOLDEN, 1.0 },
1829 { 0.0, -GOLDENINV, -1.0, GOLDEN },
1830 { 0.0, GOLDENINV, -1.0, GOLDEN },
1831 { -1.0, 0.0, -GOLDENINV, GOLDEN },
1832 { 1.0, 0.0, -GOLDENINV, GOLDEN },
1833 { -GOLDENINV, -1.0, 0.0, GOLDEN },
1834 { GOLDENINV, -1.0, 0.0, GOLDEN },
1835 { -GOLDENINV, 1.0, 0.0, GOLDEN },
1836 { GOLDENINV, 1.0, 0.0, GOLDEN },
1837 { -1.0, 0.0, GOLDENINV, GOLDEN },
1838 { 1.0, 0.0, GOLDENINV, GOLDEN },
1839 { 0.0, -GOLDENINV, 1.0, GOLDEN },
1840 { 0.0, GOLDENINV, 1.0, GOLDEN },
1841 { 0.0, 0.0, 0.0, 2.0 }
1844 static int edge_600[NUM_EDGE_600][2] = {
1845 { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 0, 5 },
1846 { 0, 6 }, { 0, 7 }, { 0, 8 }, { 0, 9 }, { 0, 10 },
1847 { 0, 11 }, { 0, 12 }, { 1, 2 }, { 1, 3 }, { 1, 4 },
1848 { 1, 5 }, { 1, 6 }, { 1, 13 }, { 1, 14 }, { 1, 15 },
1849 { 1, 16 }, { 1, 19 }, { 1, 33 }, { 2, 3 }, { 2, 4 },
1850 { 2, 7 }, { 2, 8 }, { 2, 13 }, { 2, 14 }, { 2, 17 },
1851 { 2, 18 }, { 2, 20 }, { 2, 34 }, { 3, 5 }, { 3, 7 },
1852 { 3, 9 }, { 3, 13 }, { 3, 15 }, { 3, 17 }, { 3, 21 },
1853 { 3, 23 }, { 3, 35 }, { 4, 6 }, { 4, 8 }, { 4, 10 },
1854 { 4, 14 }, { 4, 16 }, { 4, 18 }, { 4, 22 }, { 4, 24 },
1855 { 4, 36 }, { 5, 6 }, { 5, 9 }, { 5, 11 }, { 5, 15 },
1856 { 5, 19 }, { 5, 21 }, { 5, 25 }, { 5, 27 }, { 5, 37 },
1857 { 6, 10 }, { 6, 11 }, { 6, 16 }, { 6, 19 }, { 6, 22 },
1858 { 6, 25 }, { 6, 28 }, { 6, 38 }, { 7, 8 }, { 7, 9 },
1859 { 7, 12 }, { 7, 17 }, { 7, 20 }, { 7, 23 }, { 7, 26 },
1860 { 7, 29 }, { 7, 39 }, { 8, 10 }, { 8, 12 }, { 8, 18 },
1861 { 8, 20 }, { 8, 24 }, { 8, 26 }, { 8, 30 }, { 8, 40 },
1862 { 9, 11 }, { 9, 12 }, { 9, 21 }, { 9, 23 }, { 9, 27 },
1863 { 9, 29 }, { 9, 31 }, { 9, 41 }, { 10, 11 }, { 10, 12 },
1864 { 10, 22 }, { 10, 24 }, { 10, 28 }, { 10, 30 }, { 10, 32 },
1865 { 10, 42 }, { 11, 12 }, { 11, 25 }, { 11, 27 }, { 11, 28 },
1866 { 11, 31 }, { 11, 32 }, { 11, 43 }, { 12, 26 }, { 12, 29 },
1867 { 12, 30 }, { 12, 31 }, { 12, 32 }, { 12, 44 }, { 13, 14 },
1868 { 13, 15 }, { 13, 17 }, { 13, 33 }, { 13, 34 }, { 13, 35 },
1869 { 13, 45 }, { 13, 46 }, { 13, 48 }, { 14, 16 }, { 14, 18 },
1870 { 14, 33 }, { 14, 34 }, { 14, 36 }, { 14, 45 }, { 14, 47 },
1871 { 14, 49 }, { 15, 19 }, { 15, 21 }, { 15, 33 }, { 15, 35 },
1872 { 15, 37 }, { 15, 46 }, { 15, 50 }, { 15, 54 }, { 16, 19 },
1873 { 16, 22 }, { 16, 33 }, { 16, 36 }, { 16, 38 }, { 16, 47 },
1874 { 16, 51 }, { 16, 55 }, { 17, 20 }, { 17, 23 }, { 17, 34 },
1875 { 17, 35 }, { 17, 39 }, { 17, 48 }, { 17, 52 }, { 17, 56 },
1876 { 18, 20 }, { 18, 24 }, { 18, 34 }, { 18, 36 }, { 18, 40 },
1877 { 18, 49 }, { 18, 53 }, { 18, 57 }, { 19, 25 }, { 19, 33 },
1878 { 19, 37 }, { 19, 38 }, { 19, 50 }, { 19, 51 }, { 19, 58 },
1879 { 20, 26 }, { 20, 34 }, { 20, 39 }, { 20, 40 }, { 20, 52 },
1880 { 20, 53 }, { 20, 61 }, { 21, 23 }, { 21, 27 }, { 21, 35 },
1881 { 21, 37 }, { 21, 41 }, { 21, 54 }, { 21, 59 }, { 21, 62 },
1882 { 22, 24 }, { 22, 28 }, { 22, 36 }, { 22, 38 }, { 22, 42 },
1883 { 22, 55 }, { 22, 60 }, { 22, 63 }, { 23, 29 }, { 23, 35 },
1884 { 23, 39 }, { 23, 41 }, { 23, 56 }, { 23, 59 }, { 23, 64 },
1885 { 24, 30 }, { 24, 36 }, { 24, 40 }, { 24, 42 }, { 24, 57 },
1886 { 24, 60 }, { 24, 65 }, { 25, 27 }, { 25, 28 }, { 25, 37 },
1887 { 25, 38 }, { 25, 43 }, { 25, 58 }, { 25, 66 }, { 25, 67 },
1888 { 26, 29 }, { 26, 30 }, { 26, 39 }, { 26, 40 }, { 26, 44 },
1889 { 26, 61 }, { 26, 68 }, { 26, 69 }, { 27, 31 }, { 27, 37 },
1890 { 27, 41 }, { 27, 43 }, { 27, 62 }, { 27, 66 }, { 27, 70 },
1891 { 28, 32 }, { 28, 38 }, { 28, 42 }, { 28, 43 }, { 28, 63 },
1892 { 28, 67 }, { 28, 71 }, { 29, 31 }, { 29, 39 }, { 29, 41 },
1893 { 29, 44 }, { 29, 64 }, { 29, 68 }, { 29, 72 }, { 30, 32 },
1894 { 30, 40 }, { 30, 42 }, { 30, 44 }, { 30, 65 }, { 30, 69 },
1895 { 30, 73 }, { 31, 32 }, { 31, 41 }, { 31, 43 }, { 31, 44 },
1896 { 31, 70 }, { 31, 72 }, { 31, 74 }, { 32, 42 }, { 32, 43 },
1897 { 32, 44 }, { 32, 71 }, { 32, 73 }, { 32, 74 }, { 33, 45 },
1898 { 33, 46 }, { 33, 47 }, { 33, 50 }, { 33, 51 }, { 33, 75 },
1899 { 34, 45 }, { 34, 48 }, { 34, 49 }, { 34, 52 }, { 34, 53 },
1900 { 34, 76 }, { 35, 46 }, { 35, 48 }, { 35, 54 }, { 35, 56 },
1901 { 35, 59 }, { 35, 77 }, { 36, 47 }, { 36, 49 }, { 36, 55 },
1902 { 36, 57 }, { 36, 60 }, { 36, 78 }, { 37, 50 }, { 37, 54 },
1903 { 37, 58 }, { 37, 62 }, { 37, 66 }, { 37, 79 }, { 38, 51 },
1904 { 38, 55 }, { 38, 58 }, { 38, 63 }, { 38, 67 }, { 38, 80 },
1905 { 39, 52 }, { 39, 56 }, { 39, 61 }, { 39, 64 }, { 39, 68 },
1906 { 39, 81 }, { 40, 53 }, { 40, 57 }, { 40, 61 }, { 40, 65 },
1907 { 40, 69 }, { 40, 82 }, { 41, 59 }, { 41, 62 }, { 41, 64 },
1908 { 41, 70 }, { 41, 72 }, { 41, 83 }, { 42, 60 }, { 42, 63 },
1909 { 42, 65 }, { 42, 71 }, { 42, 73 }, { 42, 84 }, { 43, 66 },
1910 { 43, 67 }, { 43, 70 }, { 43, 71 }, { 43, 74 }, { 43, 85 },
1911 { 44, 68 }, { 44, 69 }, { 44, 72 }, { 44, 73 }, { 44, 74 },
1912 { 44, 86 }, { 45, 46 }, { 45, 47 }, { 45, 48 }, { 45, 49 },
1913 { 45, 75 }, { 45, 76 }, { 45, 87 }, { 45, 88 }, { 46, 48 },
1914 { 46, 50 }, { 46, 54 }, { 46, 75 }, { 46, 77 }, { 46, 87 },
1915 { 46, 89 }, { 47, 49 }, { 47, 51 }, { 47, 55 }, { 47, 75 },
1916 { 47, 78 }, { 47, 88 }, { 47, 90 }, { 48, 52 }, { 48, 56 },
1917 { 48, 76 }, { 48, 77 }, { 48, 87 }, { 48, 91 }, { 49, 53 },
1918 { 49, 57 }, { 49, 76 }, { 49, 78 }, { 49, 88 }, { 49, 92 },
1919 { 50, 51 }, { 50, 54 }, { 50, 58 }, { 50, 75 }, { 50, 79 },
1920 { 50, 89 }, { 50, 93 }, { 51, 55 }, { 51, 58 }, { 51, 75 },
1921 { 51, 80 }, { 51, 90 }, { 51, 93 }, { 52, 53 }, { 52, 56 },
1922 { 52, 61 }, { 52, 76 }, { 52, 81 }, { 52, 91 }, { 52, 94 },
1923 { 53, 57 }, { 53, 61 }, { 53, 76 }, { 53, 82 }, { 53, 92 },
1924 { 53, 94 }, { 54, 59 }, { 54, 62 }, { 54, 77 }, { 54, 79 },
1925 { 54, 89 }, { 54, 95 }, { 55, 60 }, { 55, 63 }, { 55, 78 },
1926 { 55, 80 }, { 55, 90 }, { 55, 96 }, { 56, 59 }, { 56, 64 },
1927 { 56, 77 }, { 56, 81 }, { 56, 91 }, { 56, 97 }, { 57, 60 },
1928 { 57, 65 }, { 57, 78 }, { 57, 82 }, { 57, 92 }, { 57, 98 },
1929 { 58, 66 }, { 58, 67 }, { 58, 79 }, { 58, 80 }, { 58, 93 },
1930 { 58, 99 }, { 59, 62 }, { 59, 64 }, { 59, 77 }, { 59, 83 },
1931 { 59, 95 }, { 59, 97 }, { 60, 63 }, { 60, 65 }, { 60, 78 },
1932 { 60, 84 }, { 60, 96 }, { 60, 98 }, { 61, 68 }, { 61, 69 },
1933 { 61, 81 }, { 61, 82 }, { 61, 94 }, { 61, 100 }, { 62, 66 },
1934 { 62, 70 }, { 62, 79 }, { 62, 83 }, { 62, 95 }, { 62, 101 },
1935 { 63, 67 }, { 63, 71 }, { 63, 80 }, { 63, 84 }, { 63, 96 },
1936 { 63, 102 }, { 64, 68 }, { 64, 72 }, { 64, 81 }, { 64, 83 },
1937 { 64, 97 }, { 64, 103 }, { 65, 69 }, { 65, 73 }, { 65, 82 },
1938 { 65, 84 }, { 65, 98 }, { 65, 104 }, { 66, 67 }, { 66, 70 },
1939 { 66, 79 }, { 66, 85 }, { 66, 99 }, { 66, 101 }, { 67, 71 },
1940 { 67, 80 }, { 67, 85 }, { 67, 99 }, { 67, 102 }, { 68, 69 },
1941 { 68, 72 }, { 68, 81 }, { 68, 86 }, { 68, 100 }, { 68, 103 },
1942 { 69, 73 }, { 69, 82 }, { 69, 86 }, { 69, 100 }, { 69, 104 },
1943 { 70, 72 }, { 70, 74 }, { 70, 83 }, { 70, 85 }, { 70, 101 },
1944 { 70, 105 }, { 71, 73 }, { 71, 74 }, { 71, 84 }, { 71, 85 },
1945 { 71, 102 }, { 71, 106 }, { 72, 74 }, { 72, 83 }, { 72, 86 },
1946 { 72, 103 }, { 72, 105 }, { 73, 74 }, { 73, 84 }, { 73, 86 },
1947 { 73, 104 }, { 73, 106 }, { 74, 85 }, { 74, 86 }, { 74, 105 },
1948 { 74, 106 }, { 75, 87 }, { 75, 88 }, { 75, 89 }, { 75, 90 },
1949 { 75, 93 }, { 75, 107 }, { 76, 87 }, { 76, 88 }, { 76, 91 },
1950 { 76, 92 }, { 76, 94 }, { 76, 108 }, { 77, 87 }, { 77, 89 },
1951 { 77, 91 }, { 77, 95 }, { 77, 97 }, { 77, 109 }, { 78, 88 },
1952 { 78, 90 }, { 78, 92 }, { 78, 96 }, { 78, 98 }, { 78, 110 },
1953 { 79, 89 }, { 79, 93 }, { 79, 95 }, { 79, 99 }, { 79, 101 },
1954 { 79, 111 }, { 80, 90 }, { 80, 93 }, { 80, 96 }, { 80, 99 },
1955 { 80, 102 }, { 80, 112 }, { 81, 91 }, { 81, 94 }, { 81, 97 },
1956 { 81, 100 }, { 81, 103 }, { 81, 113 }, { 82, 92 }, { 82, 94 },
1957 { 82, 98 }, { 82, 100 }, { 82, 104 }, { 82, 114 }, { 83, 95 },
1958 { 83, 97 }, { 83, 101 }, { 83, 103 }, { 83, 105 }, { 83, 115 },
1959 { 84, 96 }, { 84, 98 }, { 84, 102 }, { 84, 104 }, { 84, 106 },
1960 { 84, 116 }, { 85, 99 }, { 85, 101 }, { 85, 102 }, { 85, 105 },
1961 { 85, 106 }, { 85, 117 }, { 86, 100 }, { 86, 103 }, { 86, 104 },
1962 { 86, 105 }, { 86, 106 }, { 86, 118 }, { 87, 88 }, { 87, 89 },
1963 { 87, 91 }, { 87, 107 }, { 87, 108 }, { 87, 109 }, { 88, 90 },
1964 { 88, 92 }, { 88, 107 }, { 88, 108 }, { 88, 110 }, { 89, 93 },
1965 { 89, 95 }, { 89, 107 }, { 89, 109 }, { 89, 111 }, { 90, 93 },
1966 { 90, 96 }, { 90, 107 }, { 90, 110 }, { 90, 112 }, { 91, 94 },
1967 { 91, 97 }, { 91, 108 }, { 91, 109 }, { 91, 113 }, { 92, 94 },
1968 { 92, 98 }, { 92, 108 }, { 92, 110 }, { 92, 114 }, { 93, 99 },
1969 { 93, 107 }, { 93, 111 }, { 93, 112 }, { 94, 100 }, { 94, 108 },
1970 { 94, 113 }, { 94, 114 }, { 95, 97 }, { 95, 101 }, { 95, 109 },
1971 { 95, 111 }, { 95, 115 }, { 96, 98 }, { 96, 102 }, { 96, 110 },
1972 { 96, 112 }, { 96, 116 }, { 97, 103 }, { 97, 109 }, { 97, 113 },
1973 { 97, 115 }, { 98, 104 }, { 98, 110 }, { 98, 114 }, { 98, 116 },
1974 { 99, 101 }, { 99, 102 }, { 99, 111 }, { 99, 112 }, { 99, 117 },
1975 { 100, 103 }, { 100, 104 }, { 100, 113 }, { 100, 114 }, { 100, 118 },
1976 { 101, 105 }, { 101, 111 }, { 101, 115 }, { 101, 117 }, { 102, 106 },
1977 { 102, 112 }, { 102, 116 }, { 102, 117 }, { 103, 105 }, { 103, 113 },
1978 { 103, 115 }, { 103, 118 }, { 104, 106 }, { 104, 114 }, { 104, 116 },
1979 { 104, 118 }, { 105, 106 }, { 105, 115 }, { 105, 117 }, { 105, 118 },
1980 { 106, 116 }, { 106, 117 }, { 106, 118 }, { 107, 108 }, { 107, 109 },
1981 { 107, 110 }, { 107, 111 }, { 107, 112 }, { 107, 119 }, { 108, 109 },
1982 { 108, 110 }, { 108, 113 }, { 108, 114 }, { 108, 119 }, { 109, 111 },
1983 { 109, 113 }, { 109, 115 }, { 109, 119 }, { 110, 112 }, { 110, 114 },
1984 { 110, 116 }, { 110, 119 }, { 111, 112 }, { 111, 115 }, { 111, 117 },
1985 { 111, 119 }, { 112, 116 }, { 112, 117 }, { 112, 119 }, { 113, 114 },
1986 { 113, 115 }, { 113, 118 }, { 113, 119 }, { 114, 116 }, { 114, 118 },
1987 { 114, 119 }, { 115, 117 }, { 115, 118 }, { 115, 119 }, { 116, 117 },
1988 { 116, 118 }, { 116, 119 }, { 117, 118 }, { 117, 119 }, { 118, 119 }
1991 static int face_600[NUM_FACE_600][VERT_PER_FACE_600] = {
1992 { 0, 1, 2 }, { 0, 1, 3 }, { 0, 1, 4 }, { 0, 1, 5 },
1993 { 0, 1, 6 }, { 0, 2, 3 }, { 0, 2, 4 }, { 0, 2, 7 },
1994 { 0, 2, 8 }, { 0, 3, 5 }, { 0, 3, 7 }, { 0, 3, 9 },
1995 { 0, 4, 6 }, { 0, 4, 8 }, { 0, 4, 10 }, { 0, 5, 6 },
1996 { 0, 5, 9 }, { 0, 5, 11 }, { 0, 6, 10 }, { 0, 6, 11 },
1997 { 0, 7, 8 }, { 0, 7, 9 }, { 0, 7, 12 }, { 0, 8, 10 },
1998 { 0, 8, 12 }, { 0, 9, 11 }, { 0, 9, 12 }, { 0, 10, 11 },
1999 { 0, 10, 12 }, { 0, 11, 12 }, { 1, 2, 3 }, { 1, 2, 4 },
2000 { 1, 2, 13 }, { 1, 2, 14 }, { 1, 3, 5 }, { 1, 3, 13 },
2001 { 1, 3, 15 }, { 1, 4, 6 }, { 1, 4, 14 }, { 1, 4, 16 },
2002 { 1, 5, 6 }, { 1, 5, 15 }, { 1, 5, 19 }, { 1, 6, 16 },
2003 { 1, 6, 19 }, { 1, 13, 14 }, { 1, 13, 15 }, { 1, 13, 33 },
2004 { 1, 14, 16 }, { 1, 14, 33 }, { 1, 15, 19 }, { 1, 15, 33 },
2005 { 1, 16, 19 }, { 1, 16, 33 }, { 1, 19, 33 }, { 2, 3, 7 },
2006 { 2, 3, 13 }, { 2, 3, 17 }, { 2, 4, 8 }, { 2, 4, 14 },
2007 { 2, 4, 18 }, { 2, 7, 8 }, { 2, 7, 17 }, { 2, 7, 20 },
2008 { 2, 8, 18 }, { 2, 8, 20 }, { 2, 13, 14 }, { 2, 13, 17 },
2009 { 2, 13, 34 }, { 2, 14, 18 }, { 2, 14, 34 }, { 2, 17, 20 },
2010 { 2, 17, 34 }, { 2, 18, 20 }, { 2, 18, 34 }, { 2, 20, 34 },
2011 { 3, 5, 9 }, { 3, 5, 15 }, { 3, 5, 21 }, { 3, 7, 9 },
2012 { 3, 7, 17 }, { 3, 7, 23 }, { 3, 9, 21 }, { 3, 9, 23 },
2013 { 3, 13, 15 }, { 3, 13, 17 }, { 3, 13, 35 }, { 3, 15, 21 },
2014 { 3, 15, 35 }, { 3, 17, 23 }, { 3, 17, 35 }, { 3, 21, 23 },
2015 { 3, 21, 35 }, { 3, 23, 35 }, { 4, 6, 10 }, { 4, 6, 16 },
2016 { 4, 6, 22 }, { 4, 8, 10 }, { 4, 8, 18 }, { 4, 8, 24 },
2017 { 4, 10, 22 }, { 4, 10, 24 }, { 4, 14, 16 }, { 4, 14, 18 },
2018 { 4, 14, 36 }, { 4, 16, 22 }, { 4, 16, 36 }, { 4, 18, 24 },
2019 { 4, 18, 36 }, { 4, 22, 24 }, { 4, 22, 36 }, { 4, 24, 36 },
2020 { 5, 6, 11 }, { 5, 6, 19 }, { 5, 6, 25 }, { 5, 9, 11 },
2021 { 5, 9, 21 }, { 5, 9, 27 }, { 5, 11, 25 }, { 5, 11, 27 },
2022 { 5, 15, 19 }, { 5, 15, 21 }, { 5, 15, 37 }, { 5, 19, 25 },
2023 { 5, 19, 37 }, { 5, 21, 27 }, { 5, 21, 37 }, { 5, 25, 27 },
2024 { 5, 25, 37 }, { 5, 27, 37 }, { 6, 10, 11 }, { 6, 10, 22 },
2025 { 6, 10, 28 }, { 6, 11, 25 }, { 6, 11, 28 }, { 6, 16, 19 },
2026 { 6, 16, 22 }, { 6, 16, 38 }, { 6, 19, 25 }, { 6, 19, 38 },
2027 { 6, 22, 28 }, { 6, 22, 38 }, { 6, 25, 28 }, { 6, 25, 38 },
2028 { 6, 28, 38 }, { 7, 8, 12 }, { 7, 8, 20 }, { 7, 8, 26 },
2029 { 7, 9, 12 }, { 7, 9, 23 }, { 7, 9, 29 }, { 7, 12, 26 },
2030 { 7, 12, 29 }, { 7, 17, 20 }, { 7, 17, 23 }, { 7, 17, 39 },
2031 { 7, 20, 26 }, { 7, 20, 39 }, { 7, 23, 29 }, { 7, 23, 39 },
2032 { 7, 26, 29 }, { 7, 26, 39 }, { 7, 29, 39 }, { 8, 10, 12 },
2033 { 8, 10, 24 }, { 8, 10, 30 }, { 8, 12, 26 }, { 8, 12, 30 },
2034 { 8, 18, 20 }, { 8, 18, 24 }, { 8, 18, 40 }, { 8, 20, 26 },
2035 { 8, 20, 40 }, { 8, 24, 30 }, { 8, 24, 40 }, { 8, 26, 30 },
2036 { 8, 26, 40 }, { 8, 30, 40 }, { 9, 11, 12 }, { 9, 11, 27 },
2037 { 9, 11, 31 }, { 9, 12, 29 }, { 9, 12, 31 }, { 9, 21, 23 },
2038 { 9, 21, 27 }, { 9, 21, 41 }, { 9, 23, 29 }, { 9, 23, 41 },
2039 { 9, 27, 31 }, { 9, 27, 41 }, { 9, 29, 31 }, { 9, 29, 41 },
2040 { 9, 31, 41 }, { 10, 11, 12 }, { 10, 11, 28 }, { 10, 11, 32 },
2041 { 10, 12, 30 }, { 10, 12, 32 }, { 10, 22, 24 }, { 10, 22, 28 },
2042 { 10, 22, 42 }, { 10, 24, 30 }, { 10, 24, 42 }, { 10, 28, 32 },
2043 { 10, 28, 42 }, { 10, 30, 32 }, { 10, 30, 42 }, { 10, 32, 42 },
2044 { 11, 12, 31 }, { 11, 12, 32 }, { 11, 25, 27 }, { 11, 25, 28 },
2045 { 11, 25, 43 }, { 11, 27, 31 }, { 11, 27, 43 }, { 11, 28, 32 },
2046 { 11, 28, 43 }, { 11, 31, 32 }, { 11, 31, 43 }, { 11, 32, 43 },
2047 { 12, 26, 29 }, { 12, 26, 30 }, { 12, 26, 44 }, { 12, 29, 31 },
2048 { 12, 29, 44 }, { 12, 30, 32 }, { 12, 30, 44 }, { 12, 31, 32 },
2049 { 12, 31, 44 }, { 12, 32, 44 }, { 13, 14, 33 }, { 13, 14, 34 },
2050 { 13, 14, 45 }, { 13, 15, 33 }, { 13, 15, 35 }, { 13, 15, 46 },
2051 { 13, 17, 34 }, { 13, 17, 35 }, { 13, 17, 48 }, { 13, 33, 45 },
2052 { 13, 33, 46 }, { 13, 34, 45 }, { 13, 34, 48 }, { 13, 35, 46 },
2053 { 13, 35, 48 }, { 13, 45, 46 }, { 13, 45, 48 }, { 13, 46, 48 },
2054 { 14, 16, 33 }, { 14, 16, 36 }, { 14, 16, 47 }, { 14, 18, 34 },
2055 { 14, 18, 36 }, { 14, 18, 49 }, { 14, 33, 45 }, { 14, 33, 47 },
2056 { 14, 34, 45 }, { 14, 34, 49 }, { 14, 36, 47 }, { 14, 36, 49 },
2057 { 14, 45, 47 }, { 14, 45, 49 }, { 14, 47, 49 }, { 15, 19, 33 },
2058 { 15, 19, 37 }, { 15, 19, 50 }, { 15, 21, 35 }, { 15, 21, 37 },
2059 { 15, 21, 54 }, { 15, 33, 46 }, { 15, 33, 50 }, { 15, 35, 46 },
2060 { 15, 35, 54 }, { 15, 37, 50 }, { 15, 37, 54 }, { 15, 46, 50 },
2061 { 15, 46, 54 }, { 15, 50, 54 }, { 16, 19, 33 }, { 16, 19, 38 },
2062 { 16, 19, 51 }, { 16, 22, 36 }, { 16, 22, 38 }, { 16, 22, 55 },
2063 { 16, 33, 47 }, { 16, 33, 51 }, { 16, 36, 47 }, { 16, 36, 55 },
2064 { 16, 38, 51 }, { 16, 38, 55 }, { 16, 47, 51 }, { 16, 47, 55 },
2065 { 16, 51, 55 }, { 17, 20, 34 }, { 17, 20, 39 }, { 17, 20, 52 },
2066 { 17, 23, 35 }, { 17, 23, 39 }, { 17, 23, 56 }, { 17, 34, 48 },
2067 { 17, 34, 52 }, { 17, 35, 48 }, { 17, 35, 56 }, { 17, 39, 52 },
2068 { 17, 39, 56 }, { 17, 48, 52 }, { 17, 48, 56 }, { 17, 52, 56 },
2069 { 18, 20, 34 }, { 18, 20, 40 }, { 18, 20, 53 }, { 18, 24, 36 },
2070 { 18, 24, 40 }, { 18, 24, 57 }, { 18, 34, 49 }, { 18, 34, 53 },
2071 { 18, 36, 49 }, { 18, 36, 57 }, { 18, 40, 53 }, { 18, 40, 57 },
2072 { 18, 49, 53 }, { 18, 49, 57 }, { 18, 53, 57 }, { 19, 25, 37 },
2073 { 19, 25, 38 }, { 19, 25, 58 }, { 19, 33, 50 }, { 19, 33, 51 },
2074 { 19, 37, 50 }, { 19, 37, 58 }, { 19, 38, 51 }, { 19, 38, 58 },
2075 { 19, 50, 51 }, { 19, 50, 58 }, { 19, 51, 58 }, { 20, 26, 39 },
2076 { 20, 26, 40 }, { 20, 26, 61 }, { 20, 34, 52 }, { 20, 34, 53 },
2077 { 20, 39, 52 }, { 20, 39, 61 }, { 20, 40, 53 }, { 20, 40, 61 },
2078 { 20, 52, 53 }, { 20, 52, 61 }, { 20, 53, 61 }, { 21, 23, 35 },
2079 { 21, 23, 41 }, { 21, 23, 59 }, { 21, 27, 37 }, { 21, 27, 41 },
2080 { 21, 27, 62 }, { 21, 35, 54 }, { 21, 35, 59 }, { 21, 37, 54 },
2081 { 21, 37, 62 }, { 21, 41, 59 }, { 21, 41, 62 }, { 21, 54, 59 },
2082 { 21, 54, 62 }, { 21, 59, 62 }, { 22, 24, 36 }, { 22, 24, 42 },
2083 { 22, 24, 60 }, { 22, 28, 38 }, { 22, 28, 42 }, { 22, 28, 63 },
2084 { 22, 36, 55 }, { 22, 36, 60 }, { 22, 38, 55 }, { 22, 38, 63 },
2085 { 22, 42, 60 }, { 22, 42, 63 }, { 22, 55, 60 }, { 22, 55, 63 },
2086 { 22, 60, 63 }, { 23, 29, 39 }, { 23, 29, 41 }, { 23, 29, 64 },
2087 { 23, 35, 56 }, { 23, 35, 59 }, { 23, 39, 56 }, { 23, 39, 64 },
2088 { 23, 41, 59 }, { 23, 41, 64 }, { 23, 56, 59 }, { 23, 56, 64 },
2089 { 23, 59, 64 }, { 24, 30, 40 }, { 24, 30, 42 }, { 24, 30, 65 },
2090 { 24, 36, 57 }, { 24, 36, 60 }, { 24, 40, 57 }, { 24, 40, 65 },
2091 { 24, 42, 60 }, { 24, 42, 65 }, { 24, 57, 60 }, { 24, 57, 65 },
2092 { 24, 60, 65 }, { 25, 27, 37 }, { 25, 27, 43 }, { 25, 27, 66 },
2093 { 25, 28, 38 }, { 25, 28, 43 }, { 25, 28, 67 }, { 25, 37, 58 },
2094 { 25, 37, 66 }, { 25, 38, 58 }, { 25, 38, 67 }, { 25, 43, 66 },
2095 { 25, 43, 67 }, { 25, 58, 66 }, { 25, 58, 67 }, { 25, 66, 67 },
2096 { 26, 29, 39 }, { 26, 29, 44 }, { 26, 29, 68 }, { 26, 30, 40 },
2097 { 26, 30, 44 }, { 26, 30, 69 }, { 26, 39, 61 }, { 26, 39, 68 },
2098 { 26, 40, 61 }, { 26, 40, 69 }, { 26, 44, 68 }, { 26, 44, 69 },
2099 { 26, 61, 68 }, { 26, 61, 69 }, { 26, 68, 69 }, { 27, 31, 41 },
2100 { 27, 31, 43 }, { 27, 31, 70 }, { 27, 37, 62 }, { 27, 37, 66 },
2101 { 27, 41, 62 }, { 27, 41, 70 }, { 27, 43, 66 }, { 27, 43, 70 },
2102 { 27, 62, 66 }, { 27, 62, 70 }, { 27, 66, 70 }, { 28, 32, 42 },
2103 { 28, 32, 43 }, { 28, 32, 71 }, { 28, 38, 63 }, { 28, 38, 67 },
2104 { 28, 42, 63 }, { 28, 42, 71 }, { 28, 43, 67 }, { 28, 43, 71 },
2105 { 28, 63, 67 }, { 28, 63, 71 }, { 28, 67, 71 }, { 29, 31, 41 },
2106 { 29, 31, 44 }, { 29, 31, 72 }, { 29, 39, 64 }, { 29, 39, 68 },
2107 { 29, 41, 64 }, { 29, 41, 72 }, { 29, 44, 68 }, { 29, 44, 72 },
2108 { 29, 64, 68 }, { 29, 64, 72 }, { 29, 68, 72 }, { 30, 32, 42 },
2109 { 30, 32, 44 }, { 30, 32, 73 }, { 30, 40, 65 }, { 30, 40, 69 },
2110 { 30, 42, 65 }, { 30, 42, 73 }, { 30, 44, 69 }, { 30, 44, 73 },
2111 { 30, 65, 69 }, { 30, 65, 73 }, { 30, 69, 73 }, { 31, 32, 43 },
2112 { 31, 32, 44 }, { 31, 32, 74 }, { 31, 41, 70 }, { 31, 41, 72 },
2113 { 31, 43, 70 }, { 31, 43, 74 }, { 31, 44, 72 }, { 31, 44, 74 },
2114 { 31, 70, 72 }, { 31, 70, 74 }, { 31, 72, 74 }, { 32, 42, 71 },
2115 { 32, 42, 73 }, { 32, 43, 71 }, { 32, 43, 74 }, { 32, 44, 73 },
2116 { 32, 44, 74 }, { 32, 71, 73 }, { 32, 71, 74 }, { 32, 73, 74 },
2117 { 33, 45, 46 }, { 33, 45, 47 }, { 33, 45, 75 }, { 33, 46, 50 },
2118 { 33, 46, 75 }, { 33, 47, 51 }, { 33, 47, 75 }, { 33, 50, 51 },
2119 { 33, 50, 75 }, { 33, 51, 75 }, { 34, 45, 48 }, { 34, 45, 49 },
2120 { 34, 45, 76 }, { 34, 48, 52 }, { 34, 48, 76 }, { 34, 49, 53 },
2121 { 34, 49, 76 }, { 34, 52, 53 }, { 34, 52, 76 }, { 34, 53, 76 },
2122 { 35, 46, 48 }, { 35, 46, 54 }, { 35, 46, 77 }, { 35, 48, 56 },
2123 { 35, 48, 77 }, { 35, 54, 59 }, { 35, 54, 77 }, { 35, 56, 59 },
2124 { 35, 56, 77 }, { 35, 59, 77 }, { 36, 47, 49 }, { 36, 47, 55 },
2125 { 36, 47, 78 }, { 36, 49, 57 }, { 36, 49, 78 }, { 36, 55, 60 },
2126 { 36, 55, 78 }, { 36, 57, 60 }, { 36, 57, 78 }, { 36, 60, 78 },
2127 { 37, 50, 54 }, { 37, 50, 58 }, { 37, 50, 79 }, { 37, 54, 62 },
2128 { 37, 54, 79 }, { 37, 58, 66 }, { 37, 58, 79 }, { 37, 62, 66 },
2129 { 37, 62, 79 }, { 37, 66, 79 }, { 38, 51, 55 }, { 38, 51, 58 },
2130 { 38, 51, 80 }, { 38, 55, 63 }, { 38, 55, 80 }, { 38, 58, 67 },
2131 { 38, 58, 80 }, { 38, 63, 67 }, { 38, 63, 80 }, { 38, 67, 80 },
2132 { 39, 52, 56 }, { 39, 52, 61 }, { 39, 52, 81 }, { 39, 56, 64 },
2133 { 39, 56, 81 }, { 39, 61, 68 }, { 39, 61, 81 }, { 39, 64, 68 },
2134 { 39, 64, 81 }, { 39, 68, 81 }, { 40, 53, 57 }, { 40, 53, 61 },
2135 { 40, 53, 82 }, { 40, 57, 65 }, { 40, 57, 82 }, { 40, 61, 69 },
2136 { 40, 61, 82 }, { 40, 65, 69 }, { 40, 65, 82 }, { 40, 69, 82 },
2137 { 41, 59, 62 }, { 41, 59, 64 }, { 41, 59, 83 }, { 41, 62, 70 },
2138 { 41, 62, 83 }, { 41, 64, 72 }, { 41, 64, 83 }, { 41, 70, 72 },
2139 { 41, 70, 83 }, { 41, 72, 83 }, { 42, 60, 63 }, { 42, 60, 65 },
2140 { 42, 60, 84 }, { 42, 63, 71 }, { 42, 63, 84 }, { 42, 65, 73 },
2141 { 42, 65, 84 }, { 42, 71, 73 }, { 42, 71, 84 }, { 42, 73, 84 },
2142 { 43, 66, 67 }, { 43, 66, 70 }, { 43, 66, 85 }, { 43, 67, 71 },
2143 { 43, 67, 85 }, { 43, 70, 74 }, { 43, 70, 85 }, { 43, 71, 74 },
2144 { 43, 71, 85 }, { 43, 74, 85 }, { 44, 68, 69 }, { 44, 68, 72 },
2145 { 44, 68, 86 }, { 44, 69, 73 }, { 44, 69, 86 }, { 44, 72, 74 },
2146 { 44, 72, 86 }, { 44, 73, 74 }, { 44, 73, 86 }, { 44, 74, 86 },
2147 { 45, 46, 48 }, { 45, 46, 75 }, { 45, 46, 87 }, { 45, 47, 49 },
2148 { 45, 47, 75 }, { 45, 47, 88 }, { 45, 48, 76 }, { 45, 48, 87 },
2149 { 45, 49, 76 }, { 45, 49, 88 }, { 45, 75, 87 }, { 45, 75, 88 },
2150 { 45, 76, 87 }, { 45, 76, 88 }, { 45, 87, 88 }, { 46, 48, 77 },
2151 { 46, 48, 87 }, { 46, 50, 54 }, { 46, 50, 75 }, { 46, 50, 89 },
2152 { 46, 54, 77 }, { 46, 54, 89 }, { 46, 75, 87 }, { 46, 75, 89 },
2153 { 46, 77, 87 }, { 46, 77, 89 }, { 46, 87, 89 }, { 47, 49, 78 },
2154 { 47, 49, 88 }, { 47, 51, 55 }, { 47, 51, 75 }, { 47, 51, 90 },
2155 { 47, 55, 78 }, { 47, 55, 90 }, { 47, 75, 88 }, { 47, 75, 90 },
2156 { 47, 78, 88 }, { 47, 78, 90 }, { 47, 88, 90 }, { 48, 52, 56 },
2157 { 48, 52, 76 }, { 48, 52, 91 }, { 48, 56, 77 }, { 48, 56, 91 },
2158 { 48, 76, 87 }, { 48, 76, 91 }, { 48, 77, 87 }, { 48, 77, 91 },
2159 { 48, 87, 91 }, { 49, 53, 57 }, { 49, 53, 76 }, { 49, 53, 92 },
2160 { 49, 57, 78 }, { 49, 57, 92 }, { 49, 76, 88 }, { 49, 76, 92 },
2161 { 49, 78, 88 }, { 49, 78, 92 }, { 49, 88, 92 }, { 50, 51, 58 },
2162 { 50, 51, 75 }, { 50, 51, 93 }, { 50, 54, 79 }, { 50, 54, 89 },
2163 { 50, 58, 79 }, { 50, 58, 93 }, { 50, 75, 89 }, { 50, 75, 93 },
2164 { 50, 79, 89 }, { 50, 79, 93 }, { 50, 89, 93 }, { 51, 55, 80 },
2165 { 51, 55, 90 }, { 51, 58, 80 }, { 51, 58, 93 }, { 51, 75, 90 },
2166 { 51, 75, 93 }, { 51, 80, 90 }, { 51, 80, 93 }, { 51, 90, 93 },
2167 { 52, 53, 61 }, { 52, 53, 76 }, { 52, 53, 94 }, { 52, 56, 81 },
2168 { 52, 56, 91 }, { 52, 61, 81 }, { 52, 61, 94 }, { 52, 76, 91 },
2169 { 52, 76, 94 }, { 52, 81, 91 }, { 52, 81, 94 }, { 52, 91, 94 },
2170 { 53, 57, 82 }, { 53, 57, 92 }, { 53, 61, 82 }, { 53, 61, 94 },
2171 { 53, 76, 92 }, { 53, 76, 94 }, { 53, 82, 92 }, { 53, 82, 94 },
2172 { 53, 92, 94 }, { 54, 59, 62 }, { 54, 59, 77 }, { 54, 59, 95 },
2173 { 54, 62, 79 }, { 54, 62, 95 }, { 54, 77, 89 }, { 54, 77, 95 },
2174 { 54, 79, 89 }, { 54, 79, 95 }, { 54, 89, 95 }, { 55, 60, 63 },
2175 { 55, 60, 78 }, { 55, 60, 96 }, { 55, 63, 80 }, { 55, 63, 96 },
2176 { 55, 78, 90 }, { 55, 78, 96 }, { 55, 80, 90 }, { 55, 80, 96 },
2177 { 55, 90, 96 }, { 56, 59, 64 }, { 56, 59, 77 }, { 56, 59, 97 },
2178 { 56, 64, 81 }, { 56, 64, 97 }, { 56, 77, 91 }, { 56, 77, 97 },
2179 { 56, 81, 91 }, { 56, 81, 97 }, { 56, 91, 97 }, { 57, 60, 65 },
2180 { 57, 60, 78 }, { 57, 60, 98 }, { 57, 65, 82 }, { 57, 65, 98 },
2181 { 57, 78, 92 }, { 57, 78, 98 }, { 57, 82, 92 }, { 57, 82, 98 },
2182 { 57, 92, 98 }, { 58, 66, 67 }, { 58, 66, 79 }, { 58, 66, 99 },
2183 { 58, 67, 80 }, { 58, 67, 99 }, { 58, 79, 93 }, { 58, 79, 99 },
2184 { 58, 80, 93 }, { 58, 80, 99 }, { 58, 93, 99 }, { 59, 62, 83 },
2185 { 59, 62, 95 }, { 59, 64, 83 }, { 59, 64, 97 }, { 59, 77, 95 },
2186 { 59, 77, 97 }, { 59, 83, 95 }, { 59, 83, 97 }, { 59, 95, 97 },
2187 { 60, 63, 84 }, { 60, 63, 96 }, { 60, 65, 84 }, { 60, 65, 98 },
2188 { 60, 78, 96 }, { 60, 78, 98 }, { 60, 84, 96 }, { 60, 84, 98 },
2189 { 60, 96, 98 }, { 61, 68, 69 }, { 61, 68, 81 }, { 61, 68, 100 },
2190 { 61, 69, 82 }, { 61, 69, 100 }, { 61, 81, 94 }, { 61, 81, 100 },
2191 { 61, 82, 94 }, { 61, 82, 100 }, { 61, 94, 100 }, { 62, 66, 70 },
2192 { 62, 66, 79 }, { 62, 66, 101 }, { 62, 70, 83 }, { 62, 70, 101 },
2193 { 62, 79, 95 }, { 62, 79, 101 }, { 62, 83, 95 }, { 62, 83, 101 },
2194 { 62, 95, 101 }, { 63, 67, 71 }, { 63, 67, 80 }, { 63, 67, 102 },
2195 { 63, 71, 84 }, { 63, 71, 102 }, { 63, 80, 96 }, { 63, 80, 102 },
2196 { 63, 84, 96 }, { 63, 84, 102 }, { 63, 96, 102 }, { 64, 68, 72 },
2197 { 64, 68, 81 }, { 64, 68, 103 }, { 64, 72, 83 }, { 64, 72, 103 },
2198 { 64, 81, 97 }, { 64, 81, 103 }, { 64, 83, 97 }, { 64, 83, 103 },
2199 { 64, 97, 103 }, { 65, 69, 73 }, { 65, 69, 82 }, { 65, 69, 104 },
2200 { 65, 73, 84 }, { 65, 73, 104 }, { 65, 82, 98 }, { 65, 82, 104 },
2201 { 65, 84, 98 }, { 65, 84, 104 }, { 65, 98, 104 }, { 66, 67, 85 },
2202 { 66, 67, 99 }, { 66, 70, 85 }, { 66, 70, 101 }, { 66, 79, 99 },
2203 { 66, 79, 101 }, { 66, 85, 99 }, { 66, 85, 101 }, { 66, 99, 101 },
2204 { 67, 71, 85 }, { 67, 71, 102 }, { 67, 80, 99 }, { 67, 80, 102 },
2205 { 67, 85, 99 }, { 67, 85, 102 }, { 67, 99, 102 }, { 68, 69, 86 },
2206 { 68, 69, 100 }, { 68, 72, 86 }, { 68, 72, 103 }, { 68, 81, 100 },
2207 { 68, 81, 103 }, { 68, 86, 100 }, { 68, 86, 103 }, { 68, 100, 103 },
2208 { 69, 73, 86 }, { 69, 73, 104 }, { 69, 82, 100 }, { 69, 82, 104 },
2209 { 69, 86, 100 }, { 69, 86, 104 }, { 69, 100, 104 }, { 70, 72, 74 },
2210 { 70, 72, 83 }, { 70, 72, 105 }, { 70, 74, 85 }, { 70, 74, 105 },
2211 { 70, 83, 101 }, { 70, 83, 105 }, { 70, 85, 101 }, { 70, 85, 105 },
2212 { 70, 101, 105 }, { 71, 73, 74 }, { 71, 73, 84 }, { 71, 73, 106 },
2213 { 71, 74, 85 }, { 71, 74, 106 }, { 71, 84, 102 }, { 71, 84, 106 },
2214 { 71, 85, 102 }, { 71, 85, 106 }, { 71, 102, 106 }, { 72, 74, 86 },
2215 { 72, 74, 105 }, { 72, 83, 103 }, { 72, 83, 105 }, { 72, 86, 103 },
2216 { 72, 86, 105 }, { 72, 103, 105 }, { 73, 74, 86 }, { 73, 74, 106 },
2217 { 73, 84, 104 }, { 73, 84, 106 }, { 73, 86, 104 }, { 73, 86, 106 },
2218 { 73, 104, 106 }, { 74, 85, 105 }, { 74, 85, 106 }, { 74, 86, 105 },
2219 { 74, 86, 106 }, { 74, 105, 106 }, { 75, 87, 88 }, { 75, 87, 89 },
2220 { 75, 87, 107 }, { 75, 88, 90 }, { 75, 88, 107 }, { 75, 89, 93 },
2221 { 75, 89, 107 }, { 75, 90, 93 }, { 75, 90, 107 }, { 75, 93, 107 },
2222 { 76, 87, 88 }, { 76, 87, 91 }, { 76, 87, 108 }, { 76, 88, 92 },
2223 { 76, 88, 108 }, { 76, 91, 94 }, { 76, 91, 108 }, { 76, 92, 94 },
2224 { 76, 92, 108 }, { 76, 94, 108 }, { 77, 87, 89 }, { 77, 87, 91 },
2225 { 77, 87, 109 }, { 77, 89, 95 }, { 77, 89, 109 }, { 77, 91, 97 },
2226 { 77, 91, 109 }, { 77, 95, 97 }, { 77, 95, 109 }, { 77, 97, 109 },
2227 { 78, 88, 90 }, { 78, 88, 92 }, { 78, 88, 110 }, { 78, 90, 96 },
2228 { 78, 90, 110 }, { 78, 92, 98 }, { 78, 92, 110 }, { 78, 96, 98 },
2229 { 78, 96, 110 }, { 78, 98, 110 }, { 79, 89, 93 }, { 79, 89, 95 },
2230 { 79, 89, 111 }, { 79, 93, 99 }, { 79, 93, 111 }, { 79, 95, 101 },
2231 { 79, 95, 111 }, { 79, 99, 101 }, { 79, 99, 111 }, { 79, 101, 111 },
2232 { 80, 90, 93 }, { 80, 90, 96 }, { 80, 90, 112 }, { 80, 93, 99 },
2233 { 80, 93, 112 }, { 80, 96, 102 }, { 80, 96, 112 }, { 80, 99, 102 },
2234 { 80, 99, 112 }, { 80, 102, 112 }, { 81, 91, 94 }, { 81, 91, 97 },
2235 { 81, 91, 113 }, { 81, 94, 100 }, { 81, 94, 113 }, { 81, 97, 103 },
2236 { 81, 97, 113 }, { 81, 100, 103 }, { 81, 100, 113 }, { 81, 103, 113 },
2237 { 82, 92, 94 }, { 82, 92, 98 }, { 82, 92, 114 }, { 82, 94, 100 },
2238 { 82, 94, 114 }, { 82, 98, 104 }, { 82, 98, 114 }, { 82, 100, 104 },
2239 { 82, 100, 114 }, { 82, 104, 114 }, { 83, 95, 97 }, { 83, 95, 101 },
2240 { 83, 95, 115 }, { 83, 97, 103 }, { 83, 97, 115 }, { 83, 101, 105 },
2241 { 83, 101, 115 }, { 83, 103, 105 }, { 83, 103, 115 }, { 83, 105, 115 },
2242 { 84, 96, 98 }, { 84, 96, 102 }, { 84, 96, 116 }, { 84, 98, 104 },
2243 { 84, 98, 116 }, { 84, 102, 106 }, { 84, 102, 116 }, { 84, 104, 106 },
2244 { 84, 104, 116 }, { 84, 106, 116 }, { 85, 99, 101 }, { 85, 99, 102 },
2245 { 85, 99, 117 }, { 85, 101, 105 }, { 85, 101, 117 }, { 85, 102, 106 },
2246 { 85, 102, 117 }, { 85, 105, 106 }, { 85, 105, 117 }, { 85, 106, 117 },
2247 { 86, 100, 103 }, { 86, 100, 104 }, { 86, 100, 118 }, { 86, 103, 105 },
2248 { 86, 103, 118 }, { 86, 104, 106 }, { 86, 104, 118 }, { 86, 105, 106 },
2249 { 86, 105, 118 }, { 86, 106, 118 }, { 87, 88, 107 }, { 87, 88, 108 },
2250 { 87, 89, 107 }, { 87, 89, 109 }, { 87, 91, 108 }, { 87, 91, 109 },
2251 { 87, 107, 108 }, { 87, 107, 109 }, { 87, 108, 109 }, { 88, 90, 107 },
2252 { 88, 90, 110 }, { 88, 92, 108 }, { 88, 92, 110 }, { 88, 107, 108 },
2253 { 88, 107, 110 }, { 88, 108, 110 }, { 89, 93, 107 }, { 89, 93, 111 },
2254 { 89, 95, 109 }, { 89, 95, 111 }, { 89, 107, 109 }, { 89, 107, 111 },
2255 { 89, 109, 111 }, { 90, 93, 107 }, { 90, 93, 112 }, { 90, 96, 110 },
2256 { 90, 96, 112 }, { 90, 107, 110 }, { 90, 107, 112 }, { 90, 110, 112 },
2257 { 91, 94, 108 }, { 91, 94, 113 }, { 91, 97, 109 }, { 91, 97, 113 },
2258 { 91, 108, 109 }, { 91, 108, 113 }, { 91, 109, 113 }, { 92, 94, 108 },
2259 { 92, 94, 114 }, { 92, 98, 110 }, { 92, 98, 114 }, { 92, 108, 110 },
2260 { 92, 108, 114 }, { 92, 110, 114 }, { 93, 99, 111 }, { 93, 99, 112 },
2261 { 93, 107, 111 }, { 93, 107, 112 }, { 93, 111, 112 }, { 94, 100, 113 },
2262 { 94, 100, 114 }, { 94, 108, 113 }, { 94, 108, 114 }, { 94, 113, 114 },
2263 { 95, 97, 109 }, { 95, 97, 115 }, { 95, 101, 111 }, { 95, 101, 115 },
2264 { 95, 109, 111 }, { 95, 109, 115 }, { 95, 111, 115 }, { 96, 98, 110 },
2265 { 96, 98, 116 }, { 96, 102, 112 }, { 96, 102, 116 }, { 96, 110, 112 },
2266 { 96, 110, 116 }, { 96, 112, 116 }, { 97, 103, 113 }, { 97, 103, 115 },
2267 { 97, 109, 113 }, { 97, 109, 115 }, { 97, 113, 115 }, { 98, 104, 114 },
2268 { 98, 104, 116 }, { 98, 110, 114 }, { 98, 110, 116 }, { 98, 114, 116 },
2269 { 99, 101, 111 }, { 99, 101, 117 }, { 99, 102, 112 }, { 99, 102, 117 },
2270 { 99, 111, 112 }, { 99, 111, 117 }, { 99, 112, 117 }, { 100, 103, 113 },
2271 { 100, 103, 118 }, { 100, 104, 114 }, { 100, 104, 118 }, { 100, 113, 114 },
2272 { 100, 113, 118 }, { 100, 114, 118 }, { 101, 105, 115 }, { 101, 105, 117 },
2273 { 101, 111, 115 }, { 101, 111, 117 }, { 101, 115, 117 }, { 102, 106, 116 },
2274 { 102, 106, 117 }, { 102, 112, 116 }, { 102, 112, 117 }, { 102, 116, 117 },
2275 { 103, 105, 115 }, { 103, 105, 118 }, { 103, 113, 115 }, { 103, 113, 118 },
2276 { 103, 115, 118 }, { 104, 106, 116 }, { 104, 106, 118 }, { 104, 114, 116 },
2277 { 104, 114, 118 }, { 104, 116, 118 }, { 105, 106, 117 }, { 105, 106, 118 },
2278 { 105, 115, 117 }, { 105, 115, 118 }, { 105, 117, 118 }, { 106, 116, 117 },
2279 { 106, 116, 118 }, { 106, 117, 118 }, { 107, 108, 109 }, { 107, 108, 110 },
2280 { 107, 108, 119 }, { 107, 109, 111 }, { 107, 109, 119 }, { 107, 110, 112 },
2281 { 107, 110, 119 }, { 107, 111, 112 }, { 107, 111, 119 }, { 107, 112, 119 },
2282 { 108, 109, 113 }, { 108, 109, 119 }, { 108, 110, 114 }, { 108, 110, 119 },
2283 { 108, 113, 114 }, { 108, 113, 119 }, { 108, 114, 119 }, { 109, 111, 115 },
2284 { 109, 111, 119 }, { 109, 113, 115 }, { 109, 113, 119 }, { 109, 115, 119 },
2285 { 110, 112, 116 }, { 110, 112, 119 }, { 110, 114, 116 }, { 110, 114, 119 },
2286 { 110, 116, 119 }, { 111, 112, 117 }, { 111, 112, 119 }, { 111, 115, 117 },
2287 { 111, 115, 119 }, { 111, 117, 119 }, { 112, 116, 117 }, { 112, 116, 119 },
2288 { 112, 117, 119 }, { 113, 114, 118 }, { 113, 114, 119 }, { 113, 115, 118 },
2289 { 113, 115, 119 }, { 113, 118, 119 }, { 114, 116, 118 }, { 114, 116, 119 },
2290 { 114, 118, 119 }, { 115, 117, 118 }, { 115, 117, 119 }, { 115, 118, 119 },
2291 { 116, 117, 118 }, { 116, 117, 119 }, { 116, 118, 119 }, { 117, 118, 119 }
2294 static float edge_color_600[NUM_EDGE_600][4];
2295 static float face_color_600[NUM_FACE_600][4];
2296 static float face_color_trans_600[NUM_FACE_600][4];
2299 /* Add a rotation around the wx-plane to the matrix m. */
2300 static void rotatewx(float m[4][4], float phi)
2318 /* Add a rotation around the wy-plane to the matrix m. */
2319 static void rotatewy(float m[4][4], float phi)
2337 /* Add a rotation around the wz-plane to the matrix m. */
2338 static void rotatewz(float m[4][4], float phi)
2356 /* Add a rotation around the xy-plane to the matrix m. */
2357 static void rotatexy(float m[4][4], float phi)
2375 /* Add a rotation around the xz-plane to the matrix m. */
2376 static void rotatexz(float m[4][4], float phi)
2394 /* Add a rotation around the yz-plane to the matrix m. */
2395 static void rotateyz(float m[4][4], float phi)
2413 /* Compute the rotation matrix m from the rotation angles. */
2414 static void rotateall(float m[4][4])
2430 /* Compute the normal vector of a plane based on three points in the plane. */
2431 static void normal(float *p, float *q, float *r, float *n)
2433 float u[3], v[3], t;
2441 n[0] = u[1]*v[2]-u[2]*v[1];
2442 n[1] = u[2]*v[0]-u[0]*v[2];
2443 n[2] = u[0]*v[1]-u[1]*v[0];
2444 t = sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);
2451 /* Project an array of vertices from 4d to 3d. */
2452 static void project(float vert[][4], float v[][4], int num)
2459 /* Project the vertices from 4d to 3d. */
2460 for (i=0; i<num; i++)
2466 s += m[j][k]*vert[i][k];
2467 v[i][j] = s+offset4d[j];
2469 if (projection_4d == DISP_4D_ORTHOGRAPHIC)
2482 /* Move the projected vertices along the z-axis so that they become visible
2484 for (i=0; i<num; i++)
2487 v[i][j] += offset3d[j];
2492 /* Draw a single polytope. */
2493 static void draw(ModeInfo *mi,
2494 float v[][4], int edge[][2], int num_edge, int face[],
2495 int num_face, int vert_per_face, float edge_color[][4],
2496 float face_color[][4], float face_color_trans[][4])
2500 static float red[4] = { 1.0, 0.0, 0.0, 1.0 };
2501 static float red_trans[4] = { 1.0, 0.0, 0.0, 1.0 };
2503 mi->polygon_count = 0;
2504 if (display_mode == DISP_WIREFRAME)
2506 if (color_mode == COLORS_SINGLE)
2509 for (i=0; i<num_edge; i++)
2511 if (color_mode == COLORS_DEPTH)
2512 glColor4fv(edge_color[i]);
2513 glVertex4fv(v[edge[i][0]]);
2514 glVertex4fv(v[edge[i][1]]);
2517 mi->polygon_count = num_edge;
2521 if (color_mode == COLORS_SINGLE)
2523 red_trans[3] = face_color_trans[0][3]/2.0;
2524 if (display_mode == DISP_TRANSPARENT)
2525 glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,red_trans);
2527 glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,red);
2529 for (i=0; i<num_face; i++)
2531 glBegin(GL_POLYGON);
2532 if (color_mode == COLORS_DEPTH)
2534 if (display_mode == DISP_TRANSPARENT)
2535 glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,
2536 face_color_trans[i]);
2538 glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,
2541 normal(v[face[i*vert_per_face]],v[face[i*vert_per_face+1]],
2542 v[face[i*vert_per_face+2]],n);
2544 for (j=0; j<vert_per_face; j++)
2545 glVertex4fv(v[face[i*vert_per_face+j]]);
2548 mi->polygon_count = num_face;
2553 /* Draw a 5-cell {3,3,3} projected into 3d. */
2554 static void cell_5(ModeInfo *mi)
2556 float v[NUM_VERT_5][4];
2558 project(vert_5,v,NUM_VERT_5);
2559 draw(mi, v,edge_5,NUM_EDGE_5,(int *)face_5,NUM_FACE_5,VERT_PER_FACE_5,
2560 edge_color_5,face_color_5,face_color_trans_5);
2564 /* Draw a 8-cell {4,3,3} projected into 3d. */
2565 static void cell_8(ModeInfo *mi)
2567 float v[NUM_VERT_8][4];
2569 project(vert_8,v,NUM_VERT_8);
2570 draw(mi,v,edge_8,NUM_EDGE_8,(int *)face_8,NUM_FACE_8,VERT_PER_FACE_8,
2571 edge_color_8,face_color_8,face_color_trans_8);
2575 /* Draw a 16-cell {3,3,4} projected into 3d. */
2576 static void cell_16(ModeInfo *mi)
2578 float v[NUM_VERT_16][4];
2580 project(vert_16,v,NUM_VERT_16);
2581 draw(mi,v,edge_16,NUM_EDGE_16,(int *)face_16,NUM_FACE_16,VERT_PER_FACE_16,
2582 edge_color_16,face_color_16,face_color_trans_16);
2586 /* Draw a 24-cell {3,4,3} projected into 3d. */
2587 static void cell_24(ModeInfo *mi)
2589 float v[NUM_VERT_24][4];
2591 project(vert_24,v,NUM_VERT_24);
2592 draw(mi,v,edge_24,NUM_EDGE_24,(int *)face_24,NUM_FACE_24,VERT_PER_FACE_24,
2593 edge_color_24,face_color_24,face_color_trans_24);
2597 /* Draw a 120-cell {5,3,3} projected into 3d. */
2598 static void cell_120(ModeInfo *mi)
2600 float v[NUM_VERT_120][4];
2602 project(vert_120,v,NUM_VERT_120);
2604 v,edge_120,NUM_EDGE_120,(int *)face_120,NUM_FACE_120,VERT_PER_FACE_120,
2605 edge_color_120,face_color_120,face_color_trans_120);
2609 /* Draw a 600-cell {3,3,5} projected into 3d. */
2610 static void cell_600(ModeInfo *mi)
2612 float v[NUM_VERT_600][4];
2614 project(vert_600,v,NUM_VERT_600);
2616 v,edge_600,NUM_EDGE_600,(int *)face_600,NUM_FACE_600,VERT_PER_FACE_600,
2617 edge_color_600,face_color_600,face_color_trans_600);
2621 /* Compute a color based on the w-depth of a point. */
2622 static void color(float depth, float alpha, float min, float max,
2628 d = (depth-min)/(max-min);
2672 /* Set the colors of a single polytope's edges and faces. */
2673 static void colors(float vert[][4], int edge[][2], int num_edge, int face[],
2674 int num_face, int vert_per_face, float edge_color[][4],
2675 float face_color[][4], float face_color_trans[][4],
2676 float alpha, float min_edge_depth, float max_edge_depth,
2677 float min_face_depth, float max_face_depth)
2682 for (i=0; i<num_edge; i++)
2684 depth = (vert[edge[i][0]][3]+vert[edge[i][1]][3])/2.0;
2685 color(depth,1.0,min_edge_depth,max_edge_depth,edge_color[i]);
2687 for (i=0; i<num_face; i++)
2690 for (j=0; j<vert_per_face; j++)
2691 depth += vert[face[i*vert_per_face+j]][3];
2692 depth /= vert_per_face;
2693 color(depth,1.0,min_face_depth,max_face_depth,face_color[i]);
2694 color(depth,alpha,min_face_depth,max_face_depth,face_color_trans[i]);
2699 /* Set the colors of the polytopes' edges and faces. */
2700 static void set_colors(void)
2703 colors(vert_5,edge_5,NUM_EDGE_5,(int *)face_5,NUM_FACE_5,
2704 VERT_PER_FACE_5,edge_color_5,face_color_5,face_color_trans_5,
2705 0.5,MIN_EDGE_DEPTH_5,MAX_EDGE_DEPTH_5,MIN_FACE_DEPTH_5,
2709 colors(vert_8,edge_8,NUM_EDGE_8,(int *)face_8,NUM_FACE_8,
2710 VERT_PER_FACE_8,edge_color_8,face_color_8,face_color_trans_8,
2711 0.4,MIN_EDGE_DEPTH_8,MAX_EDGE_DEPTH_8,MIN_FACE_DEPTH_8,
2715 colors(vert_16,edge_16,NUM_EDGE_16,(int *)face_16,NUM_FACE_16,
2716 VERT_PER_FACE_16,edge_color_16,face_color_16,face_color_trans_16,
2717 0.25,MIN_EDGE_DEPTH_16,MAX_EDGE_DEPTH_16,MIN_FACE_DEPTH_16,
2721 colors(vert_24,edge_24,NUM_EDGE_24,(int *)face_24,NUM_FACE_24,
2722 VERT_PER_FACE_24,edge_color_24,face_color_24,face_color_trans_24,
2723 0.25,MIN_EDGE_DEPTH_24,MAX_EDGE_DEPTH_24,MIN_FACE_DEPTH_24,
2727 colors(vert_120,edge_120,NUM_EDGE_120,(int *)face_120,NUM_FACE_120,
2728 VERT_PER_FACE_120,edge_color_120,face_color_120,face_color_trans_120,
2729 0.15,MIN_EDGE_DEPTH_120,MAX_EDGE_DEPTH_120,MIN_FACE_DEPTH_120,
2730 MAX_FACE_DEPTH_120);
2733 colors(vert_600,edge_600,NUM_EDGE_600,(int *)face_600,NUM_FACE_600,
2734 VERT_PER_FACE_600,edge_color_600,face_color_600,face_color_trans_600,
2735 0.06,MIN_EDGE_DEPTH_600,MAX_EDGE_DEPTH_600,MIN_FACE_DEPTH_600,
2736 MAX_FACE_DEPTH_600);
2740 static void init(ModeInfo *mi)
2742 static float light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
2743 static float light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
2744 static float light_specular[] = { 0.0, 0.0, 0.0, 1.0 };
2745 static float light_position[] = { 0.0, 0.0, 1.0, 0.0 };
2746 static float mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
2757 glMatrixMode(GL_PROJECTION);
2759 if (projection_3d == DISP_3D_PERSPECTIVE)
2760 gluPerspective(60.0,1.0,0.1,100.0);
2762 glOrtho(-1.0,1.0,-1.0,1.0,0.1,100.0);;
2763 glMatrixMode(GL_MODELVIEW);
2766 if (display_mode == DISP_WIREFRAME)
2768 glDisable(GL_DEPTH_TEST);
2769 glDisable(GL_LIGHTING);
2770 glDisable(GL_LIGHT0);
2771 glDisable(GL_BLEND);
2773 else if (display_mode == DISP_SURFACE)
2775 glEnable(GL_DEPTH_TEST);
2776 glDepthFunc(GL_LESS);
2777 glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);
2778 glEnable(GL_LIGHTING);
2779 glEnable(GL_LIGHT0);
2780 glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);
2781 glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);
2782 glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);
2783 glLightfv(GL_LIGHT0,GL_POSITION,light_position);
2784 glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular);
2785 glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,0.0);
2786 glDepthMask(GL_TRUE);
2787 glDisable(GL_BLEND);
2789 else if (display_mode == DISP_TRANSPARENT)
2791 glDisable(GL_DEPTH_TEST);
2792 glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);
2793 glEnable(GL_LIGHTING);
2794 glEnable(GL_LIGHT0);
2795 glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);
2796 glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);
2797 glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);
2798 glLightfv(GL_LIGHT0,GL_POSITION,light_position);
2799 glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular);
2800 glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,0.0);
2801 glDepthMask(GL_FALSE);
2803 glBlendFunc(GL_SRC_ALPHA,GL_ONE);
2807 glDisable(GL_DEPTH_TEST);
2808 glDisable(GL_LIGHTING);
2809 glDisable(GL_LIGHT0);
2810 glDisable(GL_BLEND);
2815 /* Redisplay the polytopes. */
2816 static void display_polytopes(ModeInfo *mi)
2837 glMatrixMode(GL_PROJECTION);
2839 if (projection_3d == DISP_3D_ORTHOGRAPHIC)
2842 glOrtho(-aspect,aspect,-1.0,1.0,0.1,100.0);
2844 glOrtho(-1.0,1.0,-1.0/aspect,1.0/aspect,0.1,100.0);
2848 gluPerspective(60.0,aspect,0.1,100.0);
2850 glMatrixMode(GL_MODELVIEW);
2854 static int tick = 0;
2859 if (polytope == POLYTOPE_RANDOM)
2860 p = random() % (POLYTOPE_LAST_CELL+1);
2864 if (++tick > 1000) tick = 0;
2866 if (p == POLYTOPE_5_CELL)
2868 else if (p == POLYTOPE_8_CELL)
2870 else if (p == POLYTOPE_16_CELL)
2872 else if (p == POLYTOPE_24_CELL)
2874 else if (p == POLYTOPE_120_CELL)
2876 else if (p == POLYTOPE_600_CELL)
2884 void reshape_polytopes(ModeInfo * mi, int width, int height)
2886 polytopesstruct *hp = &poly[MI_SCREEN(mi)];
2888 hp->WindW = (GLint)width;
2889 hp->WindH = (GLint)height;
2890 glViewport(0,0,width,height);
2891 aspect = (GLfloat)width/(GLfloat)height;
2896 *-----------------------------------------------------------------------------
2897 *-----------------------------------------------------------------------------
2899 *-----------------------------------------------------------------------------
2900 *-----------------------------------------------------------------------------
2904 *-----------------------------------------------------------------------------
2905 * Initialize polytopes. Called each time the window changes.
2906 *-----------------------------------------------------------------------------
2909 void init_polytopes(ModeInfo * mi)
2911 polytopesstruct *hp;
2915 poly = (polytopesstruct *)calloc(MI_NUM_SCREENS(mi),
2916 sizeof(polytopesstruct));
2920 hp = &poly[MI_SCREEN(mi)];
2922 if ((hp->glx_context = init_GL(mi)) != NULL)
2924 reshape_polytopes(mi,MI_WIDTH(mi),MI_HEIGHT(mi));
2925 glDrawBuffer(GL_BACK);
2935 *-----------------------------------------------------------------------------
2936 * Called by the mainline code periodically to update the display.
2937 *-----------------------------------------------------------------------------
2939 void draw_polytopes(ModeInfo * mi)
2941 Display *display = MI_DISPLAY(mi);
2942 Window window = MI_WINDOW(mi);
2943 polytopesstruct *hp;
2947 hp = &poly[MI_SCREEN(mi)];
2949 MI_IS_DRAWN(mi) = True;
2950 if (!hp->glx_context)
2953 glXMakeCurrent(display,window,*(hp->glx_context));
2955 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
2958 display_polytopes(mi);
2965 glXSwapBuffers(display,window);
2970 *-----------------------------------------------------------------------------
2971 * The display is being taken away from us. Free up malloc'ed
2972 * memory and X resources that we've alloc'ed. Only called
2973 * once, we must zap everything for every screen.
2974 *-----------------------------------------------------------------------------
2977 void release_polytopes(ModeInfo * mi)
2983 for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
2985 polytopesstruct *hp = &poly[screen];
2987 if (hp->glx_context)
2988 hp->glx_context = (GLXContext *)NULL;
2990 (void) free((void *)poly);
2991 poly = (polytopesstruct *)NULL;
2996 void change_polytopes(ModeInfo * mi)
2998 polytopesstruct *hp = &poly[MI_SCREEN(mi)];
3000 if (!hp->glx_context)
3003 glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*(hp->glx_context));