EasyTimer
[web/altusmetrum] / logo.5c
1 #!/usr/bin/nickle
2 typedef struct {
3         real    x, y;
4 } coord_t;
5
6 coord_t[] poly1 = {
7         { .x = 76.137, .y = 101.89 },
8         { .x = 96.043, .y = 128.436 },
9         { .x = 129.34, .y =  21.37 },
10         { .x = 152.27, .y = -0.001 },
11         { .x = 110.637, .y = -0.001 },
12         { .x = 89.016, .y = 20.976 },
13         { .x = 89.016, .y = 103.624 },
14         { .x = 76.137, .y = 95.089 },
15         { .x = 63.258, .y = 103.624 },
16         { .x = 63.258, .y = 20.976 },
17         { .x = 41.633, .y = -0.001 },
18         { .x = 0, .y = -0.001 },
19         { .x = 22.934, .y = 21.37 },
20         { .x = 56.227, .y = 128.436 }
21 };
22
23 coord_t[] poly2 = {
24         { .x = 76.137, .y = 192.843 },
25         { .x = 94.059, .y = 135.206 },
26         { .x = 88.992, .y = 129.124 },
27         { .x = 76.137, .y = 156.151 },
28         { .x = 63.281, .y = 129.124 },
29         { .x = 58.211, .y = 135.206 },
30 };
31
32 real    scale = 40.3333385646353521 * 3.5;
33 real    scale_x = 1;
34 real    scale_y = 1;
35 real    x_off = 0, y_off = -192.843;
36 real    x_off_out = 1240;
37 real    y_off_out = 990;
38
39 int round(real r) = floor (r + 0.5);
40
41 void head() {
42         printf ("\tPolygon(\"\")\n");
43         printf ("\t(\n");
44 }
45
46 void tail() {
47         printf ("\t)\n");
48 }
49
50 void do_poly(coord_t[] p) {
51         head();
52         for (int i = 0; i < dim(p) + 1; i++) {
53                 int     j = i % dim(p);
54                 real    x = (p[j].x + x_off) * scale * scale_x;
55                 real    y = (p[j].y + y_off) * scale * scale_y;
56                 printf ("\t\t[%d %d]\n",
57                         round(x), -round(y));
58         }
59         tail();
60 }
61
62 void origin(coord_t[] p) {
63         real    max_x, min_x;
64         real    max_y, min_y;
65
66         max_x = min_x = p[0].x;
67         max_y = min_y = -p[0].y;
68
69         for (int i = 1; i < dim(p); i++) {
70                 if (p[i].x < min_x)
71                         min_x = p[i].x;
72                 if (p[i].x > max_x)
73                         max_x = p[i].x;
74                 if (-p[i].y < min_y)
75                         min_y = -p[i].y;
76                 if (-p[i].y > max_y)
77                         max_y = -p[i].y;
78         }
79         printf ("min_x = %f\n", min_x);
80         printf ("min_y = %f\n", min_y);
81         printf ("max_x = %f\n", max_x);
82         printf ("max_y = %f\n", max_y);
83         printf ("width = %f\n", max_x - min_x);
84         printf ("height = %f\n", max_y - min_y);
85 }
86
87 origin(poly1);
88 origin(poly2);
89 do_poly(poly1);
90 do_poly(poly2);
91 #do_poly(poly3);