How a tile is written down, and how to construct each of the 28 Heesch–Kienzle isohedral types. Every figure on this page was measured from the engine, not asserted.
A tile is its boundary, written as a closed walk. Each letter is one move: a turn followed by a step. Because every turn is measured against the previous edge, the same string describes the tile in any orientation — turtle geometry, not coordinates.
[@:BUBLBLBUBLBLBU]
That is a literal word: [@:…] means these exact codes.
Which letters exist depends on the lattice, because each is a (turn, length) pair
drawn from that lattice's own alphabet:
| Lattice | Turns available |
|---|---|
| kisrhombille | −150 −120 −90 −60 −30 0 30 60 90 120 150 |
| deltille | −120 −60 0 60 120 |
| quadrille | −90 0 90 |
The workbench writes this for you: draw edges and the word appears in the
family program box. Draw an open run and the segment box gives its
letters, ready to paste into a definition. Its first letter is a
-, because a turn is measured against the edge before it and an open
run has nothing before its first edge — where the segment starts is decided
by whatever you attach it to.
An edge may carry a marking, written after the word and separated by a slash, one glyph per code:
[@:BUBLBLBU/^^==vv==]
Marks are what break a tiling. A tile built to an isohedral type tiles the plane and so has no finite Heesch number at all. Mark it so that bumps and nicks are unequal in number and every bump must still meet a nick — they cannot all be satisfied, so the tiling stops. The type guarantees it tiles, the marking guarantees it stops, and the Heesch number is what is left in between.
A program is a list of definitions followed by the walk. The last bare token is the walk; everything before it names a segment.
A:-4 B:-4 ABab
A:-4 defines A as four free edges. - means
free: the enumerator tries every legal code there. Constrain by turn instead when
you want a particular kind of corner:
So A:-6 is six free edges and A:=2<1=2 is
straight, straight, a sharp turn, straight, straight. A count may follow a
segment letter too: B3 is three copies of B.
These are how one segment becomes the matching side elsewhere on the boundary, and they are the reason the language exists.
A … A%.Every letter after the first occurrence is a copy: the enumerator chooses A's edges once and every A, a, A% and a% in the walk follows. That is what makes a family — one program, many tiles, all sharing one structure.
[<:A], [>:A], [|:A],
[~:A][S:A] with A four edges long gives a
side of nine, not eight. [S0:…] has no centre edge and makes
the segment's last edge its own partner — which a bump can never be, so
that edge must be flat.A:-3 B:-3 ABab
Heesch type 1. On kisrhombille this yields 16 shapes, 14 of which the engine classifies as type 1.
A:-[@:LB] B:Aa% B2A-5aB%2-5
Reading it: A is a free edge followed by the literal pair
LB. B is A followed by A reflected-and-reversed — a
glide. The walk uses B twice, then A, five free edges, a, B reflected twice, and
five more free edges. Changing the repeat counts and run lengths walks the whole
family; this is the shape of program that produced the 40- and 52-edge tiles.
[@:BUBLBUBBBIBIBXBIBIBEAOLBUBLBL]
David Smith's shape A at √3 scale: 29 edges, unmarked, H = 4.
A type is a pattern read round the boundary, one letter per side:
The engine knows 76 boundary patterns, which reduce to these 28 types —
TCtC and CTCt are one type read from a different
starting side, and the greyed aliases show the other readings. The programs are
built from free segments; replace -n with your own edges to make a
particular tile.
The three right-hand columns give how many of 60 generated shapes the engine actually classified as that type, at segment lengths 2–4. A number means it works; "n shapes" means shapes were produced but none of that type; — means the boundary never closed.
| # | Pattern | Program | kisrhom. | deltille | quadrille |
|---|---|---|---|---|---|
| 1 | TTtu | A:-3 B:-3 ABab | 14 | 17 | 1 |
| 2 | TTTtuv | A:-2 B:-2 C:-2 ABCabc | 17 | 19 | 2 |
| 3 | CCC | A:-2 B:-2 C:-2 [S:A][S:B][S:C] | 5 | 14 | — |
| 4 | CCCC | A:-2 B:-2 C:-2 D:-2 [S:A][S:B][S:C][S:D] | 32 | 11 | 10 |
| 5 | CTCt TCtC | A:-2 B:-2 C:-2 [S:A]B[S:C]b | 8 | 22 | 6 |
| 6 | CCTCt CTCCt CTCtC TCCtC TCtCC | A:-2 B:-2 C:-2 D:-2 [S:A][S:B]C[S:D]c | 51 | 38 | 2 |
| 7 | CCTCCt CTCCtC TCCtCC | A:-2 B:-2 C:-2 D:-2 E:-2 [S:A][S:B]C[S:D][S:E]c | 45 | 38 | 39 |
| 8 | EE | A:-3 B:-3 [S90:A][S90:B] | — | — | 1 shapes |
| 9 | EEE | A:-3 B:-3 C:-3 [S90:A][S90:B][S90:C] | — | — | 5 shapes |
| 10 | CE EC | A:-3 B:-3 [S:A][S90:B] | — | — | — |
| 11 | CD DC | A:-2 B:-2 [S:A][S120:B] | 1 shapes | — | — |
| 12 | DE ED | A:-3 B:-3 [S120:A][S90:B] | — | — | — |
| 13 | CDE CED DCE DEC ECD EDC | A:-3 B:-3 C:-3 [S:A][S120:B][S90:C] | — | — | — |
| 14 | CF FC | A:-2 B:-2 [S:A][S60:B] | 1 shapes | 1 shapes | — |
| 15 | FF | A:-2 B:-2 [S60:A][S60:B] | 8 shapes | 5 shapes | — |
| 16 | CFF FCF FFC | A:-2 B:-2 C:-2 [S:A][S60:B][S60:C] | 20 shapes | 3 shapes | — |
| 17 | GGhg GgGh | A:-3 B:-3 ABB%A% | 35 | 24 | 1 shapes |
| 18 | GTGhtg GgTGht TGgtGh | A:-3 B:-3 C:-3 ABCC%bA% | 23 | 61 shapes | 11 shapes |
| 19 | GTgt TGtg | A:-3 B:-3 ABA%b | 21 | 5 shapes | 1 shapes |
| 20 | GGThgt GTgGth TGGthg | A:-2 B:-2 C:-2 ABCB%A%c | 12 | 27 | 29 |
| 21 | CGg GCg GgC | A:-4 B:-4 [S:A]BB% | 23 | 1 shapes | — |
| 22 | CCGg CGgC GCCg GgCC | A:-2 B:-2 C:-2 [S:A][S:B]CC% | 6 | 26 | 1 shapes |
| 23 | CTGgt GTCtg GgTCt TCtGg TGgtC | A:-2 B:-2 C:-2 [S:A]BCC%b | 4 | 45 shapes | 5 shapes |
| 24 | CCTGgt CTGgtC GTCCtg GgTCCt TCCtGg TGgtCC | A:-3 B:-3 C:-3 D:-3 [S:A][S:B]CDD%c | 50 | 61 shapes | 33 shapes |
| 25 | CGCg GCgC | A:-3 B:-3 C:-3 [S:A]B[S:C]B% | 55 | 6 | 1 shapes |
| 26 | GGgh | A:-3 B:-3 ABA%B% | 9 | 4 | 1 shapes |
| 27 | CGGgh GCGgh GGCgh GGgCh GGghC | A:-2 B:-2 C:-2 [S:A]BCB%C% | 21 | 39 | 31 |
| 28 | CGCGgh CGGgCh GCGCgh GCGghC GGCgCh GGgChC | A:-2 B:-2 C:-2 D:-2 [S:A]B[S:C]DB%D% | 27 | 6 | 11 |
Two things in that table are worth taking seriously, because both are easy to assume away.
The program fixes how the sides pair. It does not stop the edges you choose
from being more symmetric than that. Ask for CCC on
kisrhombille and a good share of the shapes come back classified CD
or DC — the free edges happened to land so that the tile has a
rotation the program never asked for. The engine reports what the tile is,
which is the useful answer.
Types 8–16, the ones built on D, E and F rotations, produced no tile of
their own type on any of the three lattices surveyed. Some produced nothing at
all; others produced shapes that classified elsewhere. Note that kisrhombille
does carry ±90° turns, so where EE fails there it is the
boundary failing to close, not a missing letter. This is a measurement at segment
lengths 2–4 over 60 sampled shapes, not a proof of impossibility
— a longer segment or another lattice may well close where these did
not.