A hundred tiles, each carrying the same arcs at one of four rotations.
One motif, four rotations
This is Truchet’s original idea at its plainest. Every tile in the grid carries the same
arcs; the only thing that varies is which of four quarter-turns it is drawn at.
// arc centre and start angle derived directly from tile position and rotation
canvas.DrawArc(new SKRect(cx - s, cy - s, cx + s, cy + s), startAngle, 90f, false, arcPaint);
Two bits per tile — a hundred tiles, two hundred bits — and that is the entire
information content of the drawing.
Two rows.
Why the arcs join
The arcs meet the tile boundary at the midpoint of each edge. Its neighbour’s arcs
meet the shared edge at the same point, whatever rotation either of them took. So every
arc end meets another arc end, at every interior edge, with no exceptions.
That single geometric constraint is what makes a Truchet tiling work. Without it the
motifs would be a hundred separate marks; with it they are a small number of long,
continuous paths.
Four rows. Runs of curve are already crossing several tiles.
Six rows.
Eight. The rotations are independent per tile: nothing biases a tile towards agreeing
with its neighbour, and any long run you find is coincidence rather than design.
The full grid.
Five renderings
| Rendering | Canvas | Grid | Tile | Stroke | Palette |
|---|
| Arc Magenta | 1000×1000 | 10×10 | 100 | 4 px | magenta on black |
| Arc Teal | 960×960 | 12×12 | 80 | 3 px | teal on near-black |
| Arc Paper | 1000×1000 | 10×10 | 100 | 4 px | near-black on warm cream |
| Arc Ribbon | 960×960 | 8×8 | 120 | 30 px | amber on dark slate |
| Arc Wide | 1280×720 | 16×9 | 80 | 3 px | periwinkle on midnight |
Each has its own seed, so the five are independent draws rather than one arrangement
recoloured. Stroke width relative to tile size is the parameter that decides whether the
result reads as a line or a ribbon — Arc Ribbon pushes that ratio to 25 %, and Arc Wide
demonstrates the tiling at a landscape aspect ratio.
Determinism
The generator is seeded from the preset and consumed once per tile, row by row, left to
right. Every draw restarts the sequence from the seed — the same instance always draws
the same image, and each stage is the first rows of the finished grid.