🔳 2D Tessellations
Build real 2D tessellations from lattice-vector math (triangular, square, hexagonal grids), then switch to Escher edit mode: drag control points on one tile edge and watch the matching opposite edge update by translation or mirror reflection so the tile still provably tiles the plane.
🔳 What It Demonstrates
This simulator has two real, mechanically distinct tiling engines. Regular Lattice Tiling computes triangular, square and hexagonal tessellations directly from two lattice basis vectors e₁, e₂ — every tile position is the integer combination i·e₁ + j·e₂, and rotating the angle slider rotates the basis itself, not just the drawing. Escher Edge Editor implements the genuine technique Escher used to build his interlocking animal tilings: you deform one edge of a base tile, and the opposite edge is generated automatically — by translation or by mirror reflection about the shared boundary line — so the tile is provably guaranteed to tessellate no matter how wild the edge gets.
How to Use
- Switch Mode between Regular Lattice Tiling and Escher Edge Editor.
- In lattice mode, pick a Tiling Type, adjust Tile Size and rotate the Lattice Angle to see the whole grid turn rigidly.
- In Escher mode, choose a Symmetry Group (Translation or Reflection), then drag the dots on the top/right edge of the highlighted base tile — the left/bottom edges follow automatically.
- Use Randomize edges for an instant organic tile, or Straight edges to return to a plain rectangle.
- Drag empty canvas space to pan; Reset View recentres.
Did You Know?
M. C. Escher had no formal mathematics training, yet he independently rediscovered several of the 17 wallpaper groups by studying Moorish tilework at the Alhambra in 1936. His interlocking animals all rely on exactly the two edge-matching rules modelled here: translate the edited edge across the tile, or reflect it about the boundary it shares with its neighbour — both guarantee a perfect, gap-free tiling by construction.
About this simulation
This is a 2D companion to the Tessellations simulator, built around real tiling geometry rather than a fixed picture. The lattice engine places every tile at i·e₁ + j·e₂ for integer i, j; the Escher engine derives the left and bottom edges of every tile from the top and right edges you draw, using either a pure translation or a reflection about the shared tile boundary — the same two edge-matching moves that make any interlocking tessellation actually close up without gaps.
🔬 What it shows
Regular mode: triangular, square and hexagonal tilings generated from rotated lattice basis vectors, with an optional overlay of the vectors themselves. Escher mode: a deformable base tile whose right and top edges you edit directly on the canvas; the left edge is the right edge translated by −e₁ (or mirrored about the tile boundary), and the bottom edge is the top edge translated by e₂, so every tile edge matches its neighbour exactly.
🎮 How to use
Pick a mode, then a tiling type or symmetry group. Drag the small dots on the base tile's top/right edge in Escher mode — perpendicular displacement only, so the curve can never self-intersect. Randomize edges for a quick organic tile, or reset to a plain square. Drag empty space to pan either mode.
💡 Did you know?
A wallpaper group describes exactly how a repeating 2D pattern's symmetries (translations, reflections, rotations, glides) combine; there are only 17 possible such groups in the plane, and Escher's sketchbooks worked through examples of most of them by hand decades before mathematicians catalogued his tilings group by group.
Frequently asked questions
How is this different from the original Tessellations simulator?
The original renders regular tilings and a Penrose aperiodic tiling on a fixed set of shapes. This 2D companion adds a genuine Escher-style editor: you deform an edge yourself, and the opposite edge is computed live by translation or reflection, so you can watch a tile go from a plain square to an interlocking organic shape while it stays provably tileable.
Why can I only drag the edge perpendicular to itself?
Each control point is constrained to move only away from or toward its straight-edge position, at a fixed position along the edge. That keeps the curve from folding back on itself, which would make the tile self-intersect and stop being a valid simple polygon.
What is the difference between the Translation and Reflection symmetry groups?
Translation (wallpaper group p1) copies the edited top and right edges straight across the tile by the lattice vectors, so every tile is an identical, unrotated copy. Reflection (group pm) mirrors alternating columns of tiles across their shared vertical boundary, so the edited edge and its mirror image lock together exactly along that shared line.
Is the lattice tiling mathematically exact?
Yes. Every tile position is computed as an integer combination of two basis vectors, and rotating the Lattice Angle slider applies a real 2D rotation matrix to those basis vectors before the grid is generated, so the whole tiling turns as a rigid lattice rather than being redrawn approximately.
Can the Escher tile actually fail to tessellate?
No — by construction. The left and bottom edges are never drawn independently; they are always derived from the top and right edges through an exact translation or reflection, so any edge you draw automatically has a matching partner edge and the tiling never leaves a gap.
Build real 2D tessellations from lattice-vector math (triangular, square, hexagonal grids), then switch to an Escher-style edge editor: drag control points on one tile edge and its tessellating partner edge updates by translation or mirror reflection so the tile still provably tiles the plane.
2D · HTML5 Canvas 2D · 60 FPS target · runs fully client-side, no install