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