hypercube-0.3.1
[polytopiary:hypercube.git] / test-hull2d.c
1 /* test hull2d */
2
3 #include <stdlib.h>
4 #include <stdio.h>
5 #include <vga.h>
6 #include <vgagl.h>
7
8 #include "fixed.h"
9 #include "geometry.h"
10 #include "hull2d.h"
11 #include "stack.h"
12
13 #define N (60)
14
15 int main(void) {
16
17     GraphicsContext *s_phys;
18     GraphicsContext *s_virt;
19
20     int n;
21     stack s1, s2;
22     vector2 p[N];
23
24     printf("Initialising fixed point...\n");
25     f_init();
26     printf("Creating points...\n");
27     s_clear(&s1);
28     s_clear(&s2);
29     for (n = 0; n < N; n++) {
30         p[n][0] = rand()%(320-20)+10;
31         p[n][1] = rand()%(200-20)+10;
32         s_push(&s1, &(p[n]));
33     }
34     printf("Calculating hull...\n");
35     hull2d(&s1, &s2);
36     printf("Rendering...\n");
37
38     vga_init();
39     vga_setmode(G320x200x256);
40
41     gl_setcontextvga(G320x200x256);
42     s_phys = gl_allocatecontext();
43     gl_getcontext(s_phys);
44     gl_setcontextvgavirtual(G320x200x256);
45     s_virt = gl_allocatecontext();
46     gl_getcontext(s_virt);
47
48     gl_setcontext(s_virt);
49
50     for (n = 0; n < 256; n++) {
51         gl_setpalettecolor(n, rand()%64, rand()%64, rand()%64);
52     }
53
54     for (n = 0; n < N; n++) {
55         gl_circle(p[n][0], p[n][1], 5, rand()%255+1);
56     }
57     for (n = 0; n < s_size(&s2); n++) {
58         vector2 *p0 = (vector2 *) s_at(&s2, n-1);
59         vector2 *p1 = (vector2 *) s_at(&s2, n);
60         gl_line((*p0)[0], (*p0)[1], (*p1)[0], (*p1)[1], rand()%255+1);
61     }
62
63     gl_copyscreen(s_phys);
64
65     vga_getch();
66
67     gl_clearscreen(0);
68     vga_setmode(TEXT);
69     return (EXIT_SUCCESS);
70 }
71
72 /* EOF */
73