chiark / gitweb /
.gitignore: Also ignore Metapost output.
[dnd] / graph.mp
1 numeric paperh, paperw;
2 numeric fine;
3 numeric margin;
4
5 paperh := 297 mm;
6 paperw := 210 mm;
7 fine := 1/4 pt;
8 margin := 20 mm;
9
10 numeric page; page := 0;
11
12 def squares(expr hsqsz, vsqsz) =
13   page := page + 1;
14   beginfig(page);
15     numeric w, h;
16     numeric ox, oy, lx, ly;
17
18     w = floor((paperw - 2 margin)/hsqsz);
19     h = floor((paperh - 2 margin)/vsqsz);
20     ox = (paperw - w * hsqsz)/2; lx = ox + w * hsqsz;
21     oy = (paperh - h * vsqsz)/2; ly = oy + h * vsqsz;
22
23     pickup pencircle scaled fine;
24     for i = ox step hsqsz until lx:
25       draw (i, oy) .. (i, ly);
26     endfor
27     for i = oy step vsqsz until ly:
28       draw (ox, i) .. (lx, i);
29     endfor
30   endfig;
31 enddef;
32
33 def hexes(expr hexsz) =
34   page := page + 1;
35   beginfig(page);
36     numeric ox, oy, lx, ly;
37     numeric w, h;
38     numeric v;
39     numeric a, b, c, d, e;
40
41     v = hexsz * sind 60;
42     w = floor((paperw - 2 margin)/(3 hexsz) - 1/2);
43     h = floor((paperh - 2 margin)/(2 v) - 1/2);
44     ox = (paperw - (w + 1/2) * 3 hexsz)/2; lx = ox + w * 3 hexsz;
45     oy = (paperh - (h + 1/2) * 2 v)/2; ly = oy + h * 2 v;
46
47     pickup pencircle scaled fine;
48     for i = ox step 3 hexsz until lx:
49       a := i + 1/2 hexsz; b := i + 2 hexsz; c := i + 3/2 hexsz;
50       for j = oy step 2 v until ly:
51         d := j + v; e := j + 2 v;
52         draw (a, e) -- (i, d) -- (a, j) -- (c, j) -- (b, d) -- (c, e);
53         if i < lx:
54           draw (b, d) -- (b + hexsz, d);
55         fi
56       endfor
57       draw (a, e) -- (c, e);
58     endfor
59   endfig;
60 enddef;