.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;