chiark / gitweb /
can glue to old moebius too
[moebius2.git] / primer.c
1 /*
2  * Generates the repetitive part of the gnuplot input
3  * for generating the initial triangle vertices from SGT's
4  * model.
5  */
6
7 #include "common.h"
8 #include "mgraph.h"
9
10 int main(int argc, const char **argv) {
11   static const int prec= DBL_DIG+2;
12   int vi, k;
13   
14   if (argc!=10 || !strlen(argv[2]) || strlen(argv[2]) != strlen(argv[3]))
15     { fputs("wrong # args or lengths\n",stderr); exit(8); }
16
17   printf("%s%d%s%d%s%d%s%d%s%d\n",
18          argv[7], DIM, argv[8], N, argv[8], X, argv[8], Y, argv[8], D3);
19   
20   FOR_VERTEX(vi) {
21     int x= vi & XMASK; /* distance along strip */
22     int y= vi >> YSHIFT; /* distance across strip */
23     double u= y * 1.0 / (Y-1); /* SGT's u runs 0..1 across the strip */
24
25     /* SGT's v runs 0..pi along the strip, where the join is at 0==pi.
26      * So that corresponds to 0..X (since 0==X in our scheme).
27      * Vertices with odd y coordinate are halfway to the next x coordinate.
28      */
29     double v= (x*2 + (y&1)) * 1.0 / (X*2);
30
31     if (!strchr(argv[9],'u'))
32       v *= M_PI;
33     
34     K {
35       if (k >= strlen(argv[2])) break;
36       printf("%s%c%c%s%-*.*g%s%-*.*g%s%03x %2d %2d\n",
37              argv[1], argv[2][k], argv[3][k], argv[4],
38              prec+5,prec,u, argv[5], prec+5,prec,v,
39              argv[6], vi, x, y);
40     }
41   }
42   flushoutput();
43   return 0;
44 }