Order in the plane, from a single symmetry order.
Two engines that generate mathematically exact tilings, from the Penrose rhombi to Moroccan zellij and Celtic knotwork, built against a written specification. Every claim on this page was checked by running code, and where the measurement contradicted the specification, the measurement was kept.
Three inputs are enough
The full engine exposed 60 controls. Measuring which of them could change a tiling at all left four that matter; everything else is view, scoring or gauge.
tiling( G, datum, r )
G is the symmetry order, 2 to 20, and the only irreducible input. r is the radius: how much of an infinite object to compute. The datum is exactly one of four:
Project
Project from ZG. Aperiodic, with unbounded complexity: Penrose at G = 5, dodecagonal at G = 12.
Lattice
Two commuting group elements. Periodic: the 17 wallpaper groups, each tiling with exact area.
Substitute
A substitution map. Hierarchical: Penrose inflation converges to the golden ratio φ.
Relate
A local matching relation, solved by constraint search. The highest complexity ceiling of the four.
Seven tilings, one engine
Tile counts are deterministic for the stated settings, and these renders double as the visual baselines for the test suite.
Star-and-cross, with no new variables
Extracting the faces between the straps of a Penrose patch gives concave tiles: a central ten-point star, six- and four-point stars and pentagon fillers. That is the actual vocabulary of zellij, from geometry already present.
G=5, c=0, θ=72°, regions · 461 tiles
Penrose rhombi
Aperiodic, with the central rosette.
G=5, c=0, r=16 · 341 tiles
Regular hexagons
One tile class, six sides, from concurrency alone.
G=3, c=0, r=18 · 199 tiles
4.8.8 truncated square
Squares and octagons only, detected periodic.
G=4, ρ=1/√2, r=18 · 170 tiles
Twelve-fold
4-, 6-, 8- and 24-gons together.
G=12, c=0, r=17 · 284 tiles
A panel with no centre
Skew breaks the rosette while preserving Σγ.
G=5, skew=0.55, panel · 910 tiles
Celtic knotwork
Six cords, zero weave conflicts.
G=4 lattice, θ=45°, walls 18% · 100 tiles
What measurement showed
Every number here came from running code. Where a result contradicted an expectation, the expectation is marked wrong.
The parameter surface is 60% inert
Of the full engine's 60 controls, 36 cannot change any tiling: they are inert, gauge, truncation, scoring or presentation. Even the survivors are redundant: 4,096 phase settings give only 2,434 fields up to translation.
More controls, less complexity
The nine-control periodic phase field contains four distinct neighbourhoods however large it is drawn. A two-control substitution grows without bound. Complexity per bit of input tends to zero for the most elaborate generator.
The Penrose offset carries no local information
Two unrelated five-number offsets produce identical patch sets at every radius tested. Five real numbers decide one thing only: whether their sum is an integer.
Concurrency lifts tiles past four sides
Where only two grid lines meet, the dual tile is a rhombus. Where m lines meet, it is a 2m-gon. One common offset moves between the regimes, and exact per-family spacing reaches the Archimedean tilings.
Over and under is a linear system
A plain two-colouring of strapwork crossings gave 354 conflicts. Treated correctly, the weave is a system over GF(2) on the crossing graph, and it is always solvable here.
Walls turn plaitwork into Celtic design
A wall makes a strand turn back instead of crossing into the next tile. Scattering walls merges many short rings into a few long interlaced cords, which is the progression of Celtic knotwork.
The Lo Shu square is out of reach of one field
None of the 729 linear phase settings mod 9 reproduce the Lo Shu magic square. One such field only ever makes a Latin square; a magic square needs two orthogonal fields superimposed.
Ten of thirty monument tilings, exactly
Scored against 30 Middle Eastern and European monument tilings: 10 exact, including the regular hexagonal, 4.8.8 and zellij star-and-cross; 8 correct in kind, such as Darb-i Imam and Topkapı panels; 12 out of reach.
Claims that could be wrong, and were checked
The regression suite checks the mathematics, not the pixels. A sample of its 36 assertions:
- Projection is gap-free at every symmetry order, worst |coverage − 1| = 0.027
- G = 3, c = 0 is the regular hexagonal tiling: one tile class, six sides
- ρ = 1/√2 at G = 4 gives the 4.8.8 Archimedean tiling: sides 4 and 8 only
- The 17 wallpaper groups all tile with exact area |cell| / |G|, worst error 5.9 × 10⁻¹⁴
- Penrose inflation converges to φ = 1.617647 and φ² = 2.617647
- Magic-square enumerations match the literature: 1, 880, 48, 48
- The over/under weave resolves with 0 conflicts on every route
- An unsatisfiable tile set is proven impossible in 6 nodes, not timed out
What the engines cannot do
Stated in one place, so that nothing on this page claims more than was measured.
- The triangular tiling 3⁶ is structurally unreachable. Every tile is a zonogon, which is centrally symmetric, so this is a property of the method rather than missing work.
- The reduced engine cannot make non-parallelogram cells. Hexagonal, 30-60-90 and pentagonal fundamental domains live only in the full engine.
- Exhaustive magic-square enumeration stops at order 4. Order 5 has 275,305,224 classes; order 6 is unknown to mathematics.
- The period detector needs about 20 interior tiles. Below that it can report no period on a patch that is in fact periodic, and the readout flags it.
The engine, live
Both engines run entirely in your browser: no server, no account. Choose a symmetry order and a datum, then widen the radius.
The engines need a wider screen. They open full screen on a phone, but are easiest to use on a tablet or computer.
Reduced engine
The better starting point. 21 controls, four routes, and the signature tiling(G, datum, r) as its interface.
Open the reduced engineFull engine
Seven modes and the original 60-control surface. Keeps what the reduction dropped: Dirichlet wallpaper cells and the complete magic-square machinery.
Open the full engine