Aesthetics Lab // Code Tutorial

Infinite Patterns with
Truchet Tiles

Constructing algorithmic geometry in JavaScript.

0
Year Invented
0
Binary States
0
Infinite Scaling
Abstract Procedural Geometry

Binary Complexity

Emergent mazes derived from simple binary rules.

Advertisement

> AESTHETICS_LAB // TRUCHET_TUTORIAL_INIT

Tutorial: Building emergent geometric systems using HTML5 Canvas.

The Ontology of the Truchet Tile

The aesthetic potential of computational geometry often derives from binary simplicity. Before the advent of modern graphics processing, artists and mathematicians sought to generate complexity through strict foundational rules.

In 1704, Sébastien Truchet, a Dominican friar and mathematician, documented a typographic system based on a single square tile divided by a diagonal line. The tile can be oriented in one of two ways. When placed in a grid, the random distribution of these two states generates continuous, non-repeating labyrinthine structures.

In the digital era, Truchet tiles form the backbone of procedural generation. By replacing the diagonal line with arcs, gradients, or 3D meshes, developers construct infinite topologies. This tutorial dissects the implementation of Truchet algorithms using JavaScript and the HTML5 Canvas API.

The Grid Logic

The Grid Architecture

To render a Truchet pattern, we must establish a two-dimensional coordinate matrix. The canvas is divided into a grid where each cell evaluates a pseudo-random boolean statement to determine its rendering state.

grid_setup.js
const canvas = document.getElementById('art-canvas');
const ctx = canvas.getContext('2d');

// Define cell dimensions
const step = 40; 

function drawGrid() {
  for (let x = 0; x < canvas.width; x += step) {
    for (let y = 0; y < canvas.height; y += step) {
      
      // The binary decision: 50% probability
      const isForwardSlash = Math.random() > 0.5;
      
      renderTile(x, y, step, isForwardSlash);
    }
  }
}

Rendering Logic: Diagonals and Arcs

The renderTile function executes the geometric drawing. The classic implementation utilizes diagonal lines. A more organic aesthetic is achieved by drawing quarter-arcs from the corners of the cell.

State A ( / )

Line from Bottom-Left to Top-Right. In arc mode: arcs originate from Top-Left and Bottom-Right corners.

State B ( \ )

Line from Top-Left to Bottom-Right. In arc mode: arcs originate from Top-Right and Bottom-Left corners.

render_arc.js
function renderTile(x, y, size, isForward) {
  ctx.beginPath();
  if (isForward) {
    // Top-Left Arc
    ctx.arc(x, y, size/2, 0, Math.PI/2);
    ctx.stroke();
    ctx.beginPath();
    // Bottom-Right Arc
    ctx.arc(x + size, y + size, size/2, Math.PI, Math.PI*1.5);
    ctx.stroke();
  } else {
    // Top-Right Arc
    ctx.arc(x + size, y, size/2, Math.PI/2, Math.PI);
    ctx.stroke();
    ctx.beginPath();
    // Bottom-Left Arc
    ctx.arc(x, y + size, size/2, Math.PI*1.5, Math.PI*2);
    ctx.stroke();
  }
}

[ TRUCHET_ALGORITHM_SIMULATOR ]

Modify the rendering state and grid density to observe algorithmic emergence.

Render Viewport
Render Mode
Grid Density (n)
Pan Velocity
Advertisement
Optimization

Scaling to Infinity

Creating a truly infinite canvas requires detaching the randomness from the frame loop. If we invoke Math.random() on every frame while translating the camera, the tiles will flicker chaotically.

To achieve a continuous, scrollable topography (as seen in the Hero header of this page), the boolean state of the tile must be mathematically bound to its coordinate position. We utilize a pseudo-random hashing function. Given an (x, y) grid coordinate, the function consistently returns the exact same float between 0 and 1.

This ensures that as the grid pans and new cells enter the viewport, they are rendered identically to how they would have appeared hours ago, achieving an illusion of boundless, persistent spatial continuity without storing massive arrays in memory.

Conclusion: The Logic of Emergence

The Truchet tile remains a fundamental exercise in creative coding because it perfectly demonstrates the principle of emergent complexity. A single binary decision (forward or backward), executed in a loop, yields intricate, labyrinthine topologies that trick the human eye into perceiving complex design.

By mastering these foundational geometric primitives within the HTML5 Canvas, developers build the spatial intuition required to advance into more complex procedural systems like WebGL shaders, Perlin noise fields, and generative 3D meshes.

>> Bibliographic_References.log

  • [01] Truchet, S. (1704). Mémoire sur les combinaisons. Histoire de l'Académie Royale des Sciences.
  • [02] Smith, C. S. (1987). The Tiling Patterns of Sebastien Truchet and the Topology of Structural Hierarchy. Leonardo.
  • [03] Shiffman, D. (2012). The Nature of Code. (Foundational procedural patterns in JS).
Continue Reading

Related Protocols