1 /* xscreensaver, Copyright (c) 1992, 1995, 1996, 1998, 2000
2 * Jamie Zawinski <jwz@jwz.org>
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation. No representations are made about the suitability of this
9 * software for any purpose. It is provided "as is" without express or
12 * This code derived from TI Explorer Lisp code by Joe Keane, Fritz Mueller,
17 #include "screenhack.h"
19 #define POINT_COUNT 600
20 #define LINE_COUNT 1200
22 #define ANGLE_SCALE 0.001
44 unsigned char old_dep, new_dep;
66 double hs_cos_xy, hs_sin_xy;
67 double hs_cos_xz, hs_sin_xz;
68 double hs_cos_yz, hs_sin_yz;
69 double hs_cos_xw, hs_sin_xw;
70 double hs_cos_yw, hs_sin_yw;
71 double hs_cos_zw, hs_sin_zw;
72 double hs_ref_ax, hs_ref_ay, hs_ref_az, hs_ref_aw;
73 double hs_ref_bx, hs_ref_by, hs_ref_bz, hs_ref_bw;
74 double hs_ref_cx, hs_ref_cy, hs_ref_cz, hs_ref_cw;
75 double hs_ref_dx, hs_ref_dy, hs_ref_dz, hs_ref_dw;
76 GC hs_color_gcs[8][8];
78 char hs_moved[POINT_COUNT];
79 struct point_state hs_points[POINT_COUNT];
83 static const struct point_info point_table[POINT_COUNT];
84 static const struct line_info line_table[LINE_COUNT];
86 static void set_sizes (struct hyper_state *hs, int width, int height);
89 hyperball_init (Display *dpy, Window win)
91 struct hyper_state *hs = (struct hyper_state *) calloc (1, sizeof(*hs));
95 /* double xy, xz, yz, xw, yw, zw; */
96 unsigned long bg_pixel;
100 hs->hs_display = dpy;
103 observer_z = get_float_resource (dpy, "observer-z", "Float");
104 if (observer_z < 1.125)
106 hs->hs_observer_z = observer_z;
109 XWindowAttributes wa;
110 XGetWindowAttributes (dpy, win, &wa);
112 set_sizes (hs, wa.width, wa.height);
115 hs->hs_angle_xy = get_float_resource (dpy, "xy", "Float") * ANGLE_SCALE;
116 hs->hs_angle_xz = get_float_resource (dpy, "xz", "Float") * ANGLE_SCALE;
117 hs->hs_angle_yz = get_float_resource (dpy, "yz", "Float") * ANGLE_SCALE;
118 hs->hs_angle_xw = get_float_resource (dpy, "xw", "Float") * ANGLE_SCALE;
119 hs->hs_angle_yw = get_float_resource (dpy, "yw", "Float") * ANGLE_SCALE;
120 hs->hs_angle_zw = get_float_resource (dpy, "zw", "Float") * ANGLE_SCALE;
122 delay = get_integer_resource (dpy, "delay", "Integer");
123 hs->hs_delay = delay;
125 bg_pixel = get_pixel_resource (dpy, cmap, "background", "Background");
130 unsigned long fg_pixel;
133 gcv.function = GXcopy;
134 gcv.foreground = bg_pixel;
135 black_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
136 fg_pixel = get_pixel_resource (dpy, cmap, "foreground", "Foreground");
137 gcv.foreground = fg_pixel;
138 white_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
139 hs->hs_color_gcs[0][0] = black_gc;
140 hs->hs_color_gcs[0][1] = white_gc;
147 gcv.function = GXcopy;
149 gcv.foreground = get_pixel_resource (dpy, cmap,
150 "background", "Background");
151 hs->black_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
153 for (col = 0; col < 8; col++)
154 for (dep = 0; dep < 8; dep++)
157 unsigned long fg_pixel;
160 sprintf (buffer, "color%d%d", col, dep);
161 fg_pixel = get_pixel_resource (dpy, cmap, buffer, "Foreground");
162 gcv.foreground = fg_pixel /*^ bg_pixel*/;
163 color_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
164 hs->hs_color_gcs[col][dep] = color_gc;
176 double cos_xy, sin_xy;
177 double cos_xz, sin_xz;
178 double cos_yz, sin_yz;
179 double cos_xw, sin_xw;
180 double cos_yw, sin_yw;
181 double cos_zw, sin_zw;
184 hs->hs_ref_ax = 1.0, hs->hs_ref_ay = 0.0, hs->hs_ref_az = 0.0, hs->hs_ref_aw = 0.0;
185 hs->hs_ref_bx = 0.0, hs->hs_ref_by = 1.0, hs->hs_ref_bz = 0.0, hs->hs_ref_bw = 0.0;
186 hs->hs_ref_cx = 0.0, hs->hs_ref_cy = 0.0, hs->hs_ref_cz = 1.0, hs->hs_ref_cw = 0.0;
187 hs->hs_ref_dx = 0.0, hs->hs_ref_dy = 0.0, hs->hs_ref_dz = 0.0, hs->hs_ref_dw = 1.0;
189 xy = hs->hs_angle_xy;
190 xz = hs->hs_angle_xz;
191 yz = hs->hs_angle_yz;
192 xw = hs->hs_angle_xw;
193 yw = hs->hs_angle_yw;
194 zw = hs->hs_angle_zw;
196 cos_xy = cos (xy), sin_xy = sin (xy);
197 hs->hs_cos_xy = cos_xy, hs->hs_sin_xy = sin_xy;
198 cos_xz = cos (xz), sin_xz = sin (xz);
199 hs->hs_cos_xz = cos_xz, hs->hs_sin_xz = sin_xz;
200 cos_yz = cos (yz), sin_yz = sin (yz);
201 hs->hs_cos_yz = cos_yz, hs->hs_sin_yz = sin_yz;
202 cos_xw = cos (xw), sin_xw = sin (xw);
203 hs->hs_cos_xw = cos_xw, hs->hs_sin_xw = sin_xw;
204 cos_yw = cos (yw), sin_yw = sin (yw);
205 hs->hs_cos_yw = cos_yw, hs->hs_sin_yw = sin_yw;
206 cos_zw = cos (zw), sin_zw = sin (zw);
207 hs->hs_cos_zw = cos_zw, hs->hs_sin_zw = sin_zw;
215 hyperball_draw (Display *dpy, Window window, void *closure)
217 struct hyper_state *hs = (struct hyper_state *) closure;
226 resize = hs->hs_resize;
227 if (icon || !(hs->roted | resize))
230 #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */
231 XClearWindow (dpy, window);
236 const struct point_info *point_ptr;
237 struct point_state *point_state;
245 point_ptr = &point_table[0];
246 point_state = &hs->hs_points[0];
247 mark_ptr = &hs->hs_moved[0];
255 double az, bz, cz, dz;
257 double ax, bx, cx, dx;
259 double ay, by, cy, dy;
272 pos_a = point_ptr->pg_a;
273 pos_b = point_ptr->pg_b;
274 pos_c = point_ptr->pg_c;
275 pos_d = point_ptr->pg_d;
277 az = hs->hs_ref_az; bz = hs->hs_ref_bz; cz = hs->hs_ref_cz; dz = hs->hs_ref_dz;
278 ax = hs->hs_ref_ax; bx = hs->hs_ref_bx; cx = hs->hs_ref_cx; dx = hs->hs_ref_dx;
279 ay = hs->hs_ref_ay; by = hs->hs_ref_by; cy = hs->hs_ref_cy; dy = hs->hs_ref_dy;
280 sum_z = pos_a * az + pos_b * bz + pos_c * cz + pos_d * dz;
281 observer_z = hs->hs_observer_z;
282 unit_scale = hs->hs_unit_scale;
283 sum_x = pos_a * ax + pos_b * bx + pos_c * cx + pos_d * dx;
284 sum_y = pos_a * ay + pos_b * by + pos_c * cy + pos_d * dy;
285 mul = unit_scale / (observer_z - sum_z);
286 offset_x = hs->hs_offset_x;
287 offset_y = hs->hs_offset_y;
288 old_x = point_state->new_x;
289 old_y = point_state->new_y;
290 old_dep = point_state->new_dep;
291 xf = sum_x * mul + offset_x;
292 yf = sum_y * mul + offset_y;
293 new_x = (int)rint(xf);
294 new_y = (int)rint(yf);
295 new_dep = (int)floor(sum_z * -128.0) + 128;
296 point_state->old_x = old_x;
297 point_state->old_y = old_y;
298 point_state->old_dep = old_dep;
299 point_state->new_x = new_x;
300 point_state->new_y = new_y;
301 point_state->new_dep = new_dep;
303 mov = new_x != old_x || new_y != old_y || new_dep != old_dep;
311 redraw = hs->hs_redraw;
312 if (icon || !(hs->roted | redraw))
317 const struct line_info *li_ptr;
319 Window win = hs->hs_window;
322 li_ptr = &line_table[0];
332 struct point_state *sp;
333 struct point_state *sq;
345 col = li_ptr->li_color;
347 mov_p = hs->hs_moved[ip];
348 mov_q = hs->hs_moved[iq];
349 if (!(redraw | mov_p | mov_q))
352 sp = &hs->hs_points[ip];
353 sq = &hs->hs_points[iq];
357 erase_gc = hs->hs_color_gcs[0][0];
358 draw_gc = hs->hs_color_gcs[0][1];
363 new_sum = sp->new_dep + sq->new_dep;
364 row = &hs->hs_color_gcs[col][0];
365 new_dep = new_sum >> 6;
366 erase_gc = hs->black_gc;
367 draw_gc = row[new_dep];
370 if (!redraw && erase_gc)
376 XDrawLine (dpy, win, erase_gc, p_x, p_y, q_x, q_y);
383 XDrawLine (dpy, win, draw_gc, p_x, p_y, q_x, q_y);
403 /* If you get error messages about the following forms, and you think you're
404 using an ANSI C conforming compiler, then you're mistaken. Possibly you're
405 mixing an ANSI compiler with a non-ANSI preprocessor, or vice versa.
406 Regardless, your system is broken; it's not a bug in this program.
408 #if defined(__STDC__) || defined(__ANSI_CPP__)
410 #define rotate(name,dim0,dim1) \
411 old_u = hs->hs_ref_##name##dim0; \
412 old_v = hs->hs_ref_##name##dim1; \
413 new_u = old_u * cos_a + old_v * sin_a; \
414 new_v = old_v * cos_a - old_u * sin_a; \
415 hs->hs_ref_##name##dim0 = new_u; \
416 hs->hs_ref_##name##dim1 = new_v;
418 #define rotates(dim0,dim1) \
419 if (hs->hs_sin_##dim0##dim1 != 0) { \
420 cos_a = hs->hs_cos_##dim0##dim1; \
421 sin_a = hs->hs_sin_##dim0##dim1; \
422 rotate(a, dim0, dim1); \
423 rotate(b, dim0, dim1); \
424 rotate(c, dim0, dim1); \
425 rotate(d, dim0, dim1); \
428 #else /* !__STDC__, courtesy of Andreas Luik <luik@isa.de> */
430 #define rotate(name,dim0,dim1,cos,sin) \
431 old_u = hs->hs_ref_/**/name/**/dim0; \
432 old_v = hs->hs_ref_/**/name/**/dim1; \
433 new_u = old_u * cos_a + old_v * sin_a; \
434 new_v = old_v * cos_a - old_u * sin_a; \
435 hs->hs_ref_/**/name/**/dim0 = new_u; \
436 hs->hs_ref_/**/name/**/dim1 = new_v;
438 #define rotates(dim0,dim1) \
439 if (hs->hs_sin_/**/dim0/**/dim1 != 0) { \
440 cos_a = hs->hs_cos_/**/dim0/**/dim1; \
441 sin_a = hs->hs_sin_/**/dim0/**/dim1; \
442 rotate(a, dim0, dim1); \
443 rotate(b, dim0, dim1); \
444 rotate(c, dim0, dim1); \
445 rotate(d, dim0, dim1); \
459 /* stop = hs->hs_stop; */
460 delay = hs->hs_delay;
461 if (stop && delay < 10000)
472 hyperball_event (Display *dpy, Window win, void *closure, XEvent *event)
474 struct hyper_state *hs = (struct hyper_state *) closure;
486 switch (event->xbutton.button)
489 hs->hs_stop = !hs->hs_stop;
508 XClearWindow (dpy, win);
514 hyperball_reshape (Display *dpy, Window window, void *closure,
515 unsigned int w, unsigned int h)
517 struct hyper_state *hs = (struct hyper_state *) closure;
521 set_sizes (hs, w, h);
522 XClearWindow (dpy, window);
527 set_sizes (struct hyper_state *hs, int width, int height)
536 observer_z = hs->hs_observer_z;
537 min_dim = width < height ? width : height;
538 var = sqrt(observer_z * observer_z - 1.0);
539 offset_x = 0.5 * (width - 1);
540 offset_y = 0.5 * (height - 1);
541 unit_scale = 0.4 * min_dim * var;
542 hs->hs_offset_x = (float)offset_x;
543 hs->hs_offset_y = (float)offset_y;
544 hs->hs_unit_scale = (float)unit_scale;
548 hyperball_free (Display *dpy, Window window, void *closure)
550 struct hyper_state *hs = (struct hyper_state *) closure;
556 static const struct point_info point_table[POINT_COUNT] =
558 { 0.93, 0.30, 0.09, 0.03, },
559 { 0.84, 0.49, -0.08, 0.05, },
560 { 0.72, 0.65, 0.02, -0.09, },
561 { 0.57, 0.79, 0.05, 0.07, },
562 { 0.40, 0.89, -0.09, -0.01, },
563 { 0.20, 0.95, 0.07, -0.06, },
564 { 0.00, 0.97, 0.00, 0.09, },
565 { -0.20, 0.95, -0.07, -0.06, },
566 { -0.40, 0.89, 0.09, -0.01, },
567 { -0.57, 0.79, -0.05, 0.07, },
568 { -0.72, 0.65, -0.02, -0.09, },
569 { -0.84, 0.49, 0.08, 0.05, },
570 { -0.93, 0.30, -0.09, 0.03, },
571 { -0.97, 0.10, 0.04, -0.08, },
572 { -0.97, -0.10, 0.04, 0.08, },
573 { -0.93, -0.30, -0.09, -0.03, },
574 { -0.84, -0.49, 0.08, -0.05, },
575 { -0.72, -0.65, -0.02, 0.09, },
576 { -0.57, -0.79, -0.05, -0.07, },
577 { -0.40, -0.89, 0.09, 0.01, },
578 { -0.20, -0.95, -0.07, 0.06, },
579 { 0.00, -0.97, 0.00, -0.09, },
580 { 0.20, -0.95, 0.07, 0.06, },
581 { 0.40, -0.89, -0.09, 0.01, },
582 { 0.57, -0.79, 0.05, -0.07, },
583 { 0.72, -0.65, 0.02, 0.09, },
584 { 0.84, -0.49, -0.08, -0.05, },
585 { 0.93, -0.30, 0.09, -0.03, },
586 { 0.97, -0.10, -0.04, 0.08, },
587 { 0.97, 0.10, -0.04, -0.08, },
588 { 0.27, 0.83, -0.13, -0.41, },
589 { 0.09, 0.87, 0.40, 0.18, },
590 { -0.09, 0.87, -0.40, 0.18, },
591 { -0.27, 0.83, 0.13, -0.41, },
592 { -0.44, 0.76, 0.22, 0.38, },
593 { -0.59, 0.65, -0.42, -0.09, },
594 { -0.71, 0.51, 0.35, -0.25, },
595 { -0.80, 0.36, -0.05, 0.43, },
596 { -0.86, 0.18, -0.29, -0.32, },
597 { -0.88, 0.00, 0.43, 0.00, },
598 { -0.86, -0.18, -0.29, 0.32, },
599 { -0.80, -0.36, -0.05, -0.43, },
600 { -0.71, -0.51, 0.35, 0.25, },
601 { -0.59, -0.65, -0.42, 0.09, },
602 { -0.44, -0.76, 0.22, -0.38, },
603 { -0.27, -0.83, 0.13, 0.41, },
604 { -0.09, -0.87, -0.40, -0.18, },
605 { 0.09, -0.87, 0.40, -0.18, },
606 { 0.27, -0.83, -0.13, 0.41, },
607 { 0.44, -0.76, -0.22, -0.38, },
608 { 0.59, -0.65, 0.42, 0.09, },
609 { 0.71, -0.51, -0.35, 0.25, },
610 { 0.80, -0.36, 0.05, -0.43, },
611 { 0.86, -0.18, 0.29, 0.32, },
612 { 0.88, 0.00, -0.43, 0.00, },
613 { 0.86, 0.18, 0.29, -0.32, },
614 { 0.80, 0.36, 0.05, 0.43, },
615 { 0.71, 0.51, -0.35, -0.25, },
616 { 0.59, 0.65, 0.42, -0.09, },
617 { 0.44, 0.76, -0.22, 0.38, },
618 { -0.13, 0.41, -0.27, 0.83, },
619 { -0.22, 0.38, -0.44, -0.76, },
620 { -0.29, 0.32, 0.86, 0.18, },
621 { -0.35, 0.25, -0.71, 0.51, },
622 { -0.40, 0.18, 0.09, -0.87, },
623 { -0.42, 0.09, 0.59, 0.65, },
624 { -0.43, 0.00, -0.88, 0.00, },
625 { -0.42, -0.09, 0.59, -0.65, },
626 { -0.40, -0.18, 0.09, 0.87, },
627 { -0.35, -0.25, -0.71, -0.51, },
628 { -0.29, -0.32, 0.86, -0.18, },
629 { -0.22, -0.38, -0.44, 0.76, },
630 { -0.13, -0.41, -0.27, -0.83, },
631 { -0.05, -0.43, 0.80, 0.36, },
632 { 0.05, -0.43, -0.80, 0.36, },
633 { 0.13, -0.41, 0.27, -0.83, },
634 { 0.22, -0.38, 0.44, 0.76, },
635 { 0.29, -0.32, -0.86, -0.18, },
636 { 0.35, -0.25, 0.71, -0.51, },
637 { 0.40, -0.18, -0.09, 0.87, },
638 { 0.42, -0.09, -0.59, -0.65, },
639 { 0.43, 0.00, 0.88, 0.00, },
640 { 0.42, 0.09, -0.59, 0.65, },
641 { 0.40, 0.18, -0.09, -0.87, },
642 { 0.35, 0.25, 0.71, 0.51, },
643 { 0.29, 0.32, -0.86, 0.18, },
644 { 0.22, 0.38, 0.44, -0.76, },
645 { 0.13, 0.41, 0.27, 0.83, },
646 { 0.05, 0.43, -0.80, -0.36, },
647 { -0.05, 0.43, 0.80, -0.36, },
648 { 0.09, -0.03, -0.93, 0.30, },
649 { 0.09, -0.01, 0.40, -0.89, },
650 { 0.09, 0.01, 0.40, 0.89, },
651 { 0.09, 0.03, -0.93, -0.30, },
652 { 0.08, 0.05, 0.84, -0.49, },
653 { 0.07, 0.06, -0.20, 0.95, },
654 { 0.05, 0.07, -0.57, -0.79, },
655 { 0.04, 0.08, 0.97, 0.10, },
656 { 0.02, 0.09, -0.72, 0.65, },
657 { 0.00, 0.09, 0.00, -0.97, },
658 { -0.02, 0.09, 0.72, 0.65, },
659 { -0.04, 0.08, -0.97, 0.10, },
660 { -0.05, 0.07, 0.57, -0.79, },
661 { -0.07, 0.06, 0.20, 0.95, },
662 { -0.08, 0.05, -0.84, -0.49, },
663 { -0.09, 0.03, 0.93, -0.30, },
664 { -0.09, 0.01, -0.40, 0.89, },
665 { -0.09, -0.01, -0.40, -0.89, },
666 { -0.09, -0.03, 0.93, 0.30, },
667 { -0.08, -0.05, -0.84, 0.49, },
668 { -0.07, -0.06, 0.20, -0.95, },
669 { -0.05, -0.07, 0.57, 0.79, },
670 { -0.04, -0.08, -0.97, -0.10, },
671 { -0.02, -0.09, 0.72, -0.65, },
672 { 0.00, -0.09, 0.00, 0.97, },
673 { 0.02, -0.09, -0.72, -0.65, },
674 { 0.04, -0.08, 0.97, -0.10, },
675 { 0.05, -0.07, -0.57, 0.79, },
676 { 0.07, -0.06, -0.20, -0.95, },
677 { 0.08, -0.05, 0.84, 0.49, },
678 { 0.64, 0.67, -0.15, -0.28, },
679 { 0.49, 0.79, 0.30, 0.07, },
680 { 0.31, 0.87, -0.26, 0.18, },
681 { 0.13, 0.92, 0.04, -0.31, },
682 { -0.07, 0.92, 0.20, 0.24, },
683 { -0.26, 0.89, -0.31, -0.01, },
684 { -0.44, 0.82, 0.22, -0.23, },
685 { -0.60, 0.71, 0.02, 0.31, },
686 { -0.73, 0.57, -0.25, -0.19, },
687 { -0.83, 0.40, 0.31, -0.06, },
688 { -0.90, 0.22, -0.16, 0.27, },
689 { -0.93, 0.03, -0.09, -0.30, },
690 { -0.91, -0.16, 0.28, 0.14, },
691 { -0.86, -0.35, -0.29, 0.12, },
692 { -0.77, -0.52, 0.11, -0.29, },
693 { -0.64, -0.67, 0.15, 0.28, },
694 { -0.49, -0.79, -0.30, -0.07, },
695 { -0.31, -0.87, 0.26, -0.18, },
696 { -0.13, -0.92, -0.04, 0.31, },
697 { 0.07, -0.92, -0.20, -0.24, },
698 { 0.26, -0.89, 0.31, 0.01, },
699 { 0.44, -0.82, -0.22, 0.23, },
700 { 0.60, -0.71, -0.02, -0.31, },
701 { 0.73, -0.57, 0.25, 0.19, },
702 { 0.83, -0.40, -0.31, 0.06, },
703 { 0.90, -0.22, 0.16, -0.27, },
704 { 0.93, -0.03, 0.09, 0.30, },
705 { 0.91, 0.16, -0.28, -0.14, },
706 { 0.86, 0.35, 0.29, -0.12, },
707 { 0.77, 0.52, -0.11, 0.29, },
708 { 0.44, 0.82, -0.22, -0.23, },
709 { 0.26, 0.89, 0.31, -0.01, },
710 { 0.07, 0.92, -0.20, 0.24, },
711 { -0.12, 0.92, -0.04, -0.31, },
712 { -0.31, 0.87, 0.26, 0.18, },
713 { -0.49, 0.79, -0.30, 0.07, },
714 { -0.64, 0.67, 0.15, -0.28, },
715 { -0.77, 0.52, 0.11, 0.29, },
716 { -0.86, 0.35, -0.29, -0.12, },
717 { -0.91, 0.16, 0.28, -0.14, },
718 { -0.93, -0.03, -0.09, 0.30, },
719 { -0.90, -0.22, -0.16, -0.27, },
720 { -0.83, -0.40, 0.31, 0.06, },
721 { -0.73, -0.57, -0.25, 0.19, },
722 { -0.60, -0.71, 0.02, -0.31, },
723 { -0.44, -0.82, 0.22, 0.23, },
724 { -0.26, -0.89, -0.31, 0.01, },
725 { -0.07, -0.92, 0.20, -0.24, },
726 { 0.12, -0.92, 0.04, 0.31, },
727 { 0.31, -0.87, -0.26, -0.18, },
728 { 0.49, -0.79, 0.30, -0.07, },
729 { 0.64, -0.67, -0.15, 0.28, },
730 { 0.77, -0.52, -0.11, -0.29, },
731 { 0.86, -0.35, 0.29, 0.12, },
732 { 0.91, -0.16, -0.28, 0.14, },
733 { 0.93, 0.03, 0.09, -0.30, },
734 { 0.90, 0.22, 0.16, 0.27, },
735 { 0.83, 0.40, -0.31, -0.06, },
736 { 0.73, 0.57, 0.25, -0.19, },
737 { 0.60, 0.71, -0.02, 0.31, },
738 { -0.13, 0.83, -0.27, -0.41, },
739 { -0.30, 0.79, 0.49, 0.07, },
740 { -0.46, 0.71, -0.38, 0.31, },
741 { -0.60, 0.60, 0.02, -0.49, },
742 { -0.71, 0.46, 0.35, 0.35, },
743 { -0.79, 0.30, -0.49, 0.03, },
744 { -0.83, 0.13, 0.31, -0.38, },
745 { -0.84, -0.05, 0.08, 0.49, },
746 { -0.81, -0.22, -0.41, -0.27, },
747 { -0.75, -0.38, 0.48, -0.13, },
748 { -0.65, -0.53, -0.22, 0.44, },
749 { -0.53, -0.66, -0.18, -0.46, },
750 { -0.38, -0.75, 0.46, 0.17, },
751 { -0.22, -0.82, -0.44, 0.23, },
752 { -0.04, -0.84, 0.12, -0.48, },
753 { 0.13, -0.83, 0.27, 0.41, },
754 { 0.30, -0.79, -0.49, -0.07, },
755 { 0.46, -0.71, 0.38, -0.31, },
756 { 0.60, -0.60, -0.02, 0.49, },
757 { 0.71, -0.46, -0.35, -0.35, },
758 { 0.79, -0.30, 0.49, -0.03, },
759 { 0.83, -0.13, -0.31, 0.38, },
760 { 0.84, 0.05, -0.08, -0.49, },
761 { 0.81, 0.22, 0.41, 0.27, },
762 { 0.75, 0.38, -0.48, 0.13, },
763 { 0.65, 0.53, 0.22, -0.44, },
764 { 0.53, 0.66, 0.18, 0.46, },
765 { 0.38, 0.75, -0.46, -0.17, },
766 { 0.22, 0.82, 0.44, -0.23, },
767 { 0.04, 0.84, -0.12, 0.48, },
768 { -0.65, 0.53, -0.22, -0.44, },
769 { -0.75, 0.38, 0.48, 0.13, },
770 { -0.81, 0.22, -0.41, 0.27, },
771 { -0.84, 0.05, 0.08, -0.49, },
772 { -0.83, -0.13, 0.31, 0.38, },
773 { -0.79, -0.30, -0.49, -0.03, },
774 { -0.71, -0.46, 0.35, -0.35, },
775 { -0.60, -0.60, 0.02, 0.49, },
776 { -0.46, -0.71, -0.38, -0.31, },
777 { -0.30, -0.79, 0.49, -0.07, },
778 { -0.13, -0.83, -0.27, 0.41, },
779 { 0.04, -0.84, -0.13, -0.48, },
780 { 0.22, -0.82, 0.44, 0.23, },
781 { 0.38, -0.75, -0.46, 0.17, },
782 { 0.53, -0.66, 0.18, -0.46, },
783 { 0.65, -0.53, 0.22, 0.44, },
784 { 0.75, -0.38, -0.48, -0.13, },
785 { 0.81, -0.22, 0.41, -0.27, },
786 { 0.84, -0.05, -0.08, 0.49, },
787 { 0.83, 0.13, -0.31, -0.38, },
788 { 0.79, 0.30, 0.49, 0.03, },
789 { 0.71, 0.46, -0.35, 0.35, },
790 { 0.60, 0.60, -0.02, -0.49, },
791 { 0.46, 0.71, 0.38, 0.31, },
792 { 0.30, 0.79, -0.49, 0.07, },
793 { 0.13, 0.83, 0.27, -0.41, },
794 { -0.04, 0.84, 0.13, 0.48, },
795 { -0.22, 0.82, -0.44, -0.23, },
796 { -0.38, 0.75, 0.46, -0.17, },
797 { -0.53, 0.66, -0.18, 0.46, },
798 { 0.11, 0.78, -0.33, -0.47, },
799 { -0.05, 0.79, 0.57, 0.07, },
800 { -0.22, 0.76, -0.44, 0.38, },
801 { -0.37, 0.70, 0.01, -0.58, },
802 { -0.51, 0.60, 0.42, 0.40, },
803 { -0.62, 0.49, -0.57, 0.05, },
804 { -0.71, 0.35, 0.35, -0.46, },
805 { -0.77, 0.19, 0.11, 0.57, },
806 { -0.79, 0.03, -0.49, -0.30, },
807 { -0.78, -0.14, 0.55, -0.16, },
808 { -0.73, -0.29, -0.25, 0.52, },
809 { -0.65, -0.44, -0.22, -0.53, },
810 { -0.55, -0.57, 0.54, 0.19, },
811 { -0.42, -0.67, -0.51, 0.28, },
812 { -0.27, -0.74, 0.13, -0.56, },
813 { -0.11, -0.78, 0.33, 0.47, },
814 { 0.05, -0.79, -0.57, -0.07, },
815 { 0.22, -0.76, 0.44, -0.38, },
816 { 0.37, -0.70, -0.01, 0.58, },
817 { 0.51, -0.60, -0.42, -0.40, },
818 { 0.62, -0.49, 0.57, -0.05, },
819 { 0.71, -0.35, -0.35, 0.46, },
820 { 0.77, -0.19, -0.11, -0.57, },
821 { 0.79, -0.03, 0.49, 0.30, },
822 { 0.78, 0.14, -0.55, 0.16, },
823 { 0.73, 0.29, 0.25, -0.52, },
824 { 0.65, 0.44, 0.22, 0.53, },
825 { 0.55, 0.57, -0.54, -0.19, },
826 { 0.42, 0.67, 0.51, -0.28, },
827 { 0.27, 0.74, -0.13, 0.56, },
828 { -0.73, 0.29, -0.25, -0.52, },
829 { -0.78, 0.14, 0.55, 0.16, },
830 { -0.79, -0.03, -0.49, 0.30, },
831 { -0.77, -0.19, 0.11, -0.57, },
832 { -0.71, -0.35, 0.35, 0.46, },
833 { -0.62, -0.49, -0.57, -0.05, },
834 { -0.51, -0.60, 0.42, -0.40, },
835 { -0.37, -0.70, 0.01, 0.58, },
836 { -0.22, -0.76, -0.44, -0.38, },
837 { -0.05, -0.79, 0.57, -0.07, },
838 { 0.11, -0.78, -0.33, 0.47, },
839 { 0.27, -0.74, -0.13, -0.56, },
840 { 0.42, -0.67, 0.51, 0.28, },
841 { 0.55, -0.57, -0.54, 0.19, },
842 { 0.65, -0.44, 0.22, -0.53, },
843 { 0.73, -0.29, 0.25, 0.52, },
844 { 0.78, -0.14, -0.55, -0.16, },
845 { 0.79, 0.03, 0.49, -0.30, },
846 { 0.77, 0.19, -0.11, 0.57, },
847 { 0.71, 0.35, -0.35, -0.46, },
848 { 0.62, 0.49, 0.57, 0.05, },
849 { 0.51, 0.60, -0.42, 0.40, },
850 { 0.37, 0.70, -0.01, -0.58, },
851 { 0.22, 0.76, 0.44, 0.38, },
852 { 0.05, 0.79, -0.57, 0.07, },
853 { -0.11, 0.78, 0.33, -0.47, },
854 { -0.27, 0.74, 0.13, 0.56, },
855 { -0.42, 0.67, -0.51, -0.28, },
856 { -0.55, 0.57, 0.54, -0.19, },
857 { -0.65, 0.44, -0.22, 0.53, },
858 { -0.28, 0.70, -0.24, -0.58, },
859 { -0.42, 0.62, 0.59, 0.21, },
860 { -0.54, 0.52, -0.55, 0.29, },
861 { -0.64, 0.40, 0.15, -0.60, },
862 { -0.71, 0.25, 0.35, 0.51, },
863 { -0.75, 0.10, -0.62, -0.08, },
864 { -0.75, -0.06, 0.48, -0.40, },
865 { -0.72, -0.21, -0.02, 0.62, },
866 { -0.66, -0.36, -0.45, -0.43, },
867 { -0.57, -0.49, 0.62, -0.05, },
868 { -0.46, -0.60, -0.38, 0.49, },
869 { -0.33, -0.68, -0.11, -0.61, },
870 { -0.18, -0.73, 0.53, 0.33, },
871 { -0.02, -0.75, -0.60, 0.17, },
872 { 0.13, -0.74, 0.27, -0.56, },
873 { 0.28, -0.70, 0.24, 0.58, },
874 { 0.42, -0.62, -0.59, -0.21, },
875 { 0.54, -0.52, 0.55, -0.29, },
876 { 0.64, -0.40, -0.15, 0.60, },
877 { 0.71, -0.25, -0.35, -0.51, },
878 { 0.75, -0.10, 0.62, 0.08, },
879 { 0.75, 0.06, -0.48, 0.40, },
880 { 0.72, 0.21, 0.02, -0.62, },
881 { 0.66, 0.36, 0.45, 0.43, },
882 { 0.57, 0.49, -0.62, 0.05, },
883 { 0.46, 0.60, 0.38, -0.49, },
884 { 0.33, 0.68, 0.11, 0.61, },
885 { 0.18, 0.73, -0.53, -0.33, },
886 { 0.02, 0.75, 0.60, -0.17, },
887 { -0.13, 0.74, -0.27, 0.56, },
888 { -0.46, 0.60, -0.38, -0.49, },
889 { -0.57, 0.49, 0.62, 0.05, },
890 { -0.66, 0.36, -0.45, 0.43, },
891 { -0.72, 0.21, -0.02, -0.62, },
892 { -0.75, 0.06, 0.48, 0.40, },
893 { -0.75, -0.10, -0.62, 0.08, },
894 { -0.71, -0.25, 0.35, -0.51, },
895 { -0.64, -0.40, 0.15, 0.60, },
896 { -0.54, -0.52, -0.55, -0.29, },
897 { -0.42, -0.62, 0.59, -0.21, },
898 { -0.28, -0.70, -0.24, 0.58, },
899 { -0.13, -0.74, -0.27, -0.56, },
900 { 0.02, -0.75, 0.60, 0.17, },
901 { 0.18, -0.73, -0.53, 0.33, },
902 { 0.33, -0.68, 0.11, -0.61, },
903 { 0.46, -0.60, 0.38, 0.49, },
904 { 0.57, -0.49, -0.62, -0.05, },
905 { 0.66, -0.36, 0.45, -0.43, },
906 { 0.72, -0.21, 0.02, 0.62, },
907 { 0.75, -0.06, -0.48, -0.40, },
908 { 0.75, 0.10, 0.62, -0.08, },
909 { 0.71, 0.25, -0.35, 0.51, },
910 { 0.64, 0.40, -0.15, -0.60, },
911 { 0.54, 0.52, 0.55, 0.29, },
912 { 0.42, 0.62, -0.59, 0.21, },
913 { 0.28, 0.70, 0.24, -0.58, },
914 { 0.13, 0.74, 0.27, 0.56, },
915 { -0.02, 0.75, -0.60, -0.17, },
916 { -0.18, 0.73, 0.53, -0.33, },
917 { -0.33, 0.68, -0.11, 0.61, },
918 { -0.24, 0.58, 0.28, 0.70, },
919 { -0.35, 0.51, -0.71, -0.25, },
920 { -0.45, 0.43, 0.66, -0.36, },
921 { -0.53, 0.33, -0.18, 0.73, },
922 { -0.59, 0.21, -0.42, -0.62, },
923 { -0.62, 0.08, 0.75, 0.10, },
924 { -0.62, -0.05, -0.57, 0.49, },
925 { -0.60, -0.17, 0.02, -0.75, },
926 { -0.55, -0.29, 0.54, 0.52, },
927 { -0.48, -0.40, -0.75, 0.06, },
928 { -0.38, -0.49, 0.46, -0.60, },
929 { -0.27, -0.56, 0.13, 0.74, },
930 { -0.15, -0.60, -0.64, -0.40, },
931 { -0.02, -0.62, 0.72, -0.21, },
932 { 0.11, -0.61, -0.33, 0.68, },
933 { 0.24, -0.58, -0.29, -0.70, },
934 { 0.35, -0.51, 0.71, 0.25, },
935 { 0.45, -0.43, -0.66, 0.36, },
936 { 0.53, -0.33, 0.18, -0.73, },
937 { 0.59, -0.21, 0.42, 0.62, },
938 { 0.62, -0.08, -0.75, -0.10, },
939 { 0.62, 0.05, 0.57, -0.49, },
940 { 0.60, 0.17, -0.02, 0.75, },
941 { 0.55, 0.29, -0.54, -0.52, },
942 { 0.48, 0.40, 0.75, -0.06, },
943 { 0.38, 0.49, -0.46, 0.60, },
944 { 0.27, 0.56, -0.13, -0.74, },
945 { 0.15, 0.60, 0.64, 0.40, },
946 { 0.02, 0.62, -0.72, 0.21, },
947 { -0.11, 0.61, 0.33, -0.68, },
948 { -0.38, 0.49, 0.46, 0.60, },
949 { -0.48, 0.40, -0.75, -0.06, },
950 { -0.55, 0.29, 0.54, -0.52, },
951 { -0.60, 0.17, 0.02, 0.75, },
952 { -0.62, 0.05, -0.57, -0.49, },
953 { -0.62, -0.08, 0.75, -0.10, },
954 { -0.59, -0.21, -0.42, 0.62, },
955 { -0.53, -0.33, -0.18, -0.73, },
956 { -0.45, -0.43, 0.66, 0.36, },
957 { -0.35, -0.51, -0.71, 0.25, },
958 { -0.24, -0.58, 0.28, -0.70, },
959 { -0.11, -0.61, 0.33, 0.68, },
960 { 0.02, -0.62, -0.72, -0.21, },
961 { 0.15, -0.60, 0.64, -0.40, },
962 { 0.27, -0.56, -0.13, 0.74, },
963 { 0.38, -0.49, -0.46, -0.60, },
964 { 0.48, -0.40, 0.75, 0.06, },
965 { 0.55, -0.29, -0.54, 0.52, },
966 { 0.60, -0.17, -0.02, -0.75, },
967 { 0.62, -0.05, 0.57, 0.49, },
968 { 0.62, 0.08, -0.75, 0.10, },
969 { 0.59, 0.21, 0.42, -0.62, },
970 { 0.53, 0.33, 0.18, 0.73, },
971 { 0.45, 0.43, -0.66, -0.36, },
972 { 0.35, 0.51, 0.71, -0.25, },
973 { 0.24, 0.58, -0.28, 0.70, },
974 { 0.11, 0.61, -0.33, -0.68, },
975 { -0.02, 0.62, 0.72, 0.21, },
976 { -0.15, 0.60, -0.64, 0.40, },
977 { -0.27, 0.56, 0.13, -0.74, },
978 { -0.33, 0.47, -0.11, 0.78, },
979 { -0.42, 0.40, -0.51, -0.60, },
980 { -0.49, 0.30, 0.79, 0.03, },
981 { -0.54, 0.19, -0.55, 0.57, },
982 { -0.57, 0.07, -0.05, -0.79, },
983 { -0.57, -0.05, 0.62, 0.49, },
984 { -0.55, -0.16, -0.78, 0.14, },
985 { -0.51, -0.28, 0.42, -0.67, },
986 { -0.44, -0.38, 0.22, 0.76, },
987 { -0.35, -0.46, -0.71, -0.35, },
988 { -0.25, -0.52, 0.73, -0.29, },
989 { -0.13, -0.56, -0.27, 0.74, },
990 { -0.01, -0.58, -0.37, -0.70, },
991 { 0.11, -0.57, 0.77, 0.19, },
992 { 0.22, -0.53, -0.65, 0.44, },
993 { 0.33, -0.47, 0.11, -0.78, },
994 { 0.42, -0.40, 0.51, 0.60, },
995 { 0.49, -0.30, -0.79, -0.03, },
996 { 0.54, -0.19, 0.55, -0.57, },
997 { 0.57, -0.07, 0.05, 0.79, },
998 { 0.57, 0.05, -0.62, -0.49, },
999 { 0.55, 0.16, 0.78, -0.14, },
1000 { 0.51, 0.28, -0.42, 0.67, },
1001 { 0.44, 0.38, -0.22, -0.76, },
1002 { 0.35, 0.46, 0.71, 0.35, },
1003 { 0.25, 0.52, -0.73, 0.29, },
1004 { 0.13, 0.56, 0.27, -0.74, },
1005 { 0.01, 0.58, 0.37, 0.70, },
1006 { -0.11, 0.57, -0.77, -0.19, },
1007 { -0.22, 0.53, 0.65, -0.44, },
1008 { -0.25, 0.52, 0.73, 0.29, },
1009 { -0.35, 0.46, -0.71, 0.35, },
1010 { -0.44, 0.38, 0.22, -0.76, },
1011 { -0.51, 0.28, 0.42, 0.67, },
1012 { -0.55, 0.16, -0.78, -0.14, },
1013 { -0.57, 0.05, 0.62, -0.49, },
1014 { -0.57, -0.07, -0.05, 0.79, },
1015 { -0.54, -0.19, -0.55, -0.57, },
1016 { -0.49, -0.30, 0.79, -0.03, },
1017 { -0.42, -0.40, -0.51, 0.60, },
1018 { -0.33, -0.47, -0.11, -0.78, },
1019 { -0.22, -0.53, 0.65, 0.44, },
1020 { -0.11, -0.57, -0.77, 0.19, },
1021 { 0.01, -0.58, 0.37, -0.70, },
1022 { 0.13, -0.56, 0.27, 0.74, },
1023 { 0.25, -0.52, -0.73, -0.29, },
1024 { 0.35, -0.46, 0.71, -0.35, },
1025 { 0.44, -0.38, -0.22, 0.76, },
1026 { 0.51, -0.28, -0.42, -0.67, },
1027 { 0.55, -0.16, 0.78, 0.14, },
1028 { 0.57, -0.05, -0.62, 0.49, },
1029 { 0.57, 0.07, 0.05, -0.79, },
1030 { 0.54, 0.19, 0.55, 0.57, },
1031 { 0.49, 0.30, -0.79, 0.03, },
1032 { 0.42, 0.40, 0.51, -0.60, },
1033 { 0.33, 0.47, 0.11, 0.78, },
1034 { 0.22, 0.53, -0.65, -0.44, },
1035 { 0.11, 0.57, 0.77, -0.19, },
1036 { -0.01, 0.58, -0.37, 0.70, },
1037 { -0.13, 0.56, -0.27, -0.74, },
1038 { -0.27, 0.41, 0.13, 0.83, },
1039 { -0.35, 0.35, -0.71, -0.46, },
1040 { -0.41, 0.27, 0.81, -0.22, },
1041 { -0.46, 0.17, -0.38, 0.75, },
1042 { -0.49, 0.07, -0.30, -0.79, },
1043 { -0.49, -0.03, 0.79, 0.30, },
1044 { -0.48, -0.13, -0.75, 0.38, },
1045 { -0.44, -0.23, 0.22, -0.82, },
1046 { -0.38, -0.31, 0.46, 0.71, },
1047 { -0.31, -0.38, -0.83, -0.13, },
1048 { -0.22, -0.44, 0.65, -0.53, },
1049 { -0.13, -0.48, -0.04, 0.84, },
1050 { -0.02, -0.49, -0.60, -0.60, },
1051 { 0.08, -0.49, 0.84, -0.05, },
1052 { 0.18, -0.46, -0.53, 0.66, },
1053 { 0.27, -0.41, -0.13, -0.83, },
1054 { 0.35, -0.35, 0.71, 0.46, },
1055 { 0.41, -0.27, -0.81, 0.22, },
1056 { 0.46, -0.17, 0.38, -0.75, },
1057 { 0.49, -0.07, 0.30, 0.79, },
1058 { 0.49, 0.03, -0.79, -0.30, },
1059 { 0.48, 0.13, 0.75, -0.38, },
1060 { 0.44, 0.23, -0.22, 0.82, },
1061 { 0.38, 0.31, -0.46, -0.71, },
1062 { 0.31, 0.38, 0.83, 0.13, },
1063 { 0.22, 0.44, -0.65, 0.53, },
1064 { 0.12, 0.48, 0.04, -0.84, },
1065 { 0.02, 0.49, 0.60, 0.60, },
1066 { -0.08, 0.49, -0.84, 0.05, },
1067 { -0.18, 0.46, 0.53, -0.66, },
1068 { -0.22, 0.44, 0.65, 0.53, },
1069 { -0.31, 0.38, -0.83, 0.13, },
1070 { -0.38, 0.31, 0.46, -0.71, },
1071 { -0.44, 0.23, 0.22, 0.82, },
1072 { -0.48, 0.13, -0.75, -0.38, },
1073 { -0.49, 0.03, 0.79, -0.30, },
1074 { -0.49, -0.07, -0.30, 0.79, },
1075 { -0.46, -0.17, -0.38, -0.75, },
1076 { -0.41, -0.27, 0.81, 0.22, },
1077 { -0.35, -0.35, -0.71, 0.46, },
1078 { -0.27, -0.41, 0.13, -0.83, },
1079 { -0.18, -0.46, 0.53, 0.66, },
1080 { -0.08, -0.49, -0.84, -0.05, },
1081 { 0.02, -0.49, 0.60, -0.60, },
1082 { 0.12, -0.48, 0.04, 0.84, },
1083 { 0.22, -0.44, -0.65, -0.53, },
1084 { 0.31, -0.38, 0.83, -0.13, },
1085 { 0.38, -0.31, -0.46, 0.71, },
1086 { 0.44, -0.23, -0.22, -0.82, },
1087 { 0.48, -0.13, 0.75, 0.38, },
1088 { 0.49, -0.03, -0.79, 0.30, },
1089 { 0.49, 0.07, 0.30, -0.79, },
1090 { 0.46, 0.17, 0.38, 0.75, },
1091 { 0.41, 0.27, -0.81, -0.22, },
1092 { 0.35, 0.35, 0.71, -0.46, },
1093 { 0.27, 0.41, -0.13, 0.83, },
1094 { 0.18, 0.46, -0.53, -0.66, },
1095 { 0.08, 0.49, 0.84, 0.05, },
1096 { -0.02, 0.49, -0.60, 0.60, },
1097 { -0.12, 0.48, -0.04, -0.84, },
1098 { -0.15, 0.28, -0.64, 0.67, },
1099 { -0.20, 0.24, -0.07, -0.92, },
1100 { -0.25, 0.19, 0.73, 0.57, },
1101 { -0.28, 0.14, -0.91, 0.16, },
1102 { -0.30, 0.07, 0.49, -0.79, },
1103 { -0.31, 0.01, 0.26, 0.89, },
1104 { -0.31, -0.06, -0.83, -0.40, },
1105 { -0.29, -0.12, 0.86, -0.35, },
1106 { -0.26, -0.18, -0.31, 0.87, },
1107 { -0.22, -0.23, -0.44, -0.82, },
1108 { -0.16, -0.27, 0.90, 0.22, },
1109 { -0.11, -0.29, -0.77, 0.52, },
1110 { -0.04, -0.31, 0.12, -0.92, },
1111 { 0.02, -0.31, 0.60, 0.71, },
1112 { 0.09, -0.30, -0.93, -0.03, },
1113 { 0.15, -0.28, 0.64, -0.67, },
1114 { 0.20, -0.24, 0.07, 0.92, },
1115 { 0.25, -0.19, -0.73, -0.57, },
1116 { 0.28, -0.14, 0.91, -0.16, },
1117 { 0.30, -0.07, -0.49, 0.79, },
1118 { 0.31, -0.01, -0.26, -0.89, },
1119 { 0.31, 0.06, 0.83, 0.40, },
1120 { 0.29, 0.12, -0.86, 0.35, },
1121 { 0.26, 0.18, 0.31, -0.87, },
1122 { 0.22, 0.23, 0.44, 0.82, },
1123 { 0.16, 0.27, -0.90, -0.22, },
1124 { 0.11, 0.29, 0.77, -0.52, },
1125 { 0.04, 0.31, -0.12, 0.92, },
1126 { -0.02, 0.31, -0.60, -0.71, },
1127 { -0.09, 0.30, 0.93, 0.03, },
1128 { -0.22, 0.23, -0.44, 0.82, },
1129 { -0.26, 0.18, -0.31, -0.87, },
1130 { -0.29, 0.12, 0.86, 0.35, },
1131 { -0.31, 0.06, -0.83, 0.40, },
1132 { -0.31, -0.01, 0.26, -0.89, },
1133 { -0.30, -0.07, 0.49, 0.79, },
1134 { -0.28, -0.14, -0.91, -0.16, },
1135 { -0.25, -0.19, 0.73, -0.57, },
1136 { -0.20, -0.24, -0.07, 0.92, },
1137 { -0.15, -0.28, -0.64, -0.67, },
1138 { -0.09, -0.30, 0.93, -0.03, },
1139 { -0.02, -0.31, -0.60, 0.71, },
1140 { 0.04, -0.31, -0.13, -0.92, },
1141 { 0.11, -0.29, 0.77, 0.52, },
1142 { 0.16, -0.27, -0.90, 0.22, },
1143 { 0.22, -0.23, 0.44, -0.82, },
1144 { 0.26, -0.18, 0.31, 0.87, },
1145 { 0.29, -0.12, -0.86, -0.35, },
1146 { 0.31, -0.06, 0.83, -0.40, },
1147 { 0.31, 0.01, -0.26, 0.89, },
1148 { 0.30, 0.07, -0.49, -0.79, },
1149 { 0.28, 0.14, 0.91, 0.16, },
1150 { 0.25, 0.19, -0.73, 0.57, },
1151 { 0.20, 0.24, 0.07, -0.92, },
1152 { 0.15, 0.28, 0.64, 0.67, },
1153 { 0.09, 0.30, -0.93, 0.03, },
1154 { 0.02, 0.31, 0.60, -0.71, },
1155 { -0.04, 0.31, 0.13, 0.92, },
1156 { -0.11, 0.29, -0.77, -0.52, },
1157 { -0.16, 0.27, 0.90, -0.22, },
1160 static const struct line_info line_table[LINE_COUNT] =
2365 static const char *hyperball_defaults[] =
2375 ".background: black",
2376 ".foreground: white",
2445 static XrmOptionDescRec hyperball_options [] =
2447 { "-observer-z", ".observer-z", XrmoptionSepArg, 0 },
2448 { "-delay", ".delay", XrmoptionSepArg, 0 },
2449 { "-xw", ".xw", XrmoptionSepArg, 0 },
2450 { "-xy", ".xy", XrmoptionSepArg, 0 },
2451 { "-xz", ".xz", XrmoptionSepArg, 0 },
2452 { "-yw", ".yw", XrmoptionSepArg, 0 },
2453 { "-yz", ".yz", XrmoptionSepArg, 0 },
2454 { "-zw", ".zw", XrmoptionSepArg, 0 },
2458 XSCREENSAVER_MODULE ("HyperBall", hyperball)