Another version of this article on the homepage.
Wolfram Technology Conference presentation: https://www.wolfram.com/broadcast/video.php?v=2502​
See Bridges 2018 paper Multi Scale Truchet Patterns for more explanations.
To use this notebook, put the package file MultiScaleTruchetPatterns.wl (attached below) in the same directory as the notebook.

History

“Truchet tiles” originate with a treatise by Sebastien Truchet published in 1704, Mémoir sur les Combinaisons, in which Truchet investigates the kinds of patterns that can be made with a simple square tile divided diagonally, white on one side and black on the other. Cyril Stanley Smith popularized the idea in his 1987 paper, The tiling patterns of Sebastian Truchet and the topology of structural hierarchy. Toward the end of that paper, Smith introduces a tile that has become the most popular representative of the idea of Truchet tiles:​
​When that tile is used in random orientations to produce a tiling, the curves join to form connected domains that can be colored alternately white and black, producing an infinity of patterns:​
​I wondered whether that concept could be made to work at multiple scales. If you replace Smith’s two arcs with four arcs that connect with the sides at 1/3 and 2/3, two points in a larger tile connect with points in adjoining smaller tiles:​
​That leaves loose ends along an edge, but in any assembly of tiles you can always connect up the loose ends to form connected domains, as with Smith’s tiles. The winged tile trick gives you the colored domains automatically:​

Package

I developed the Wolfram Language package MultiScaleTruchetPatterns.wl to explore these patterns. Download this zip archive, uncompress, open the notebook MultiScaleTruchetPatternExamples.nb in Mathematica or Wolfram Desktop, and evaluate the expressions therein. The package is loaded on the first evaluation (answer “yes” when asked if you want to evaluate the initialization), which may take a while:
https://christophercarlson.com/wp-content/uploads/2018/03/multiscaletruchetpatterns.zip

Initialization


Tiles

Start with the set of “winged” tiles shown below. The content of a tile is shown within the dotted lines. “Wings” extend beyond the content area. (The gray background is not part of the tile, but is included so you can see the boundary of the white parts.) Successive tiles in the set are scaled by 1/2, and black and white are swapped at each step. The boundaries between black and white meet the dotted lines at 1/3 and 2/3:
Assemble tiles by adjoining along the dotted lines, letting the wings overlap adjacent tiles. Place smaller tiles on top of larger tiles:​

Basic square tile with two connections per side

In[]:=
Graphics[{{LightGray,Rectangle[-.5{1,1},1.5{1,1}]},SquareArcTile["/"]},ImageSize200]
Out[]=

All named square arc tiles (two connections per side)

In[]:=
Labeled[Graphics[{{LightGray,Rectangle[-.5{1,1},1.5{1,1}]},SquareArcTile[#]},ImageSize50],#]&/@SquareTileNames[]
Out[]=

\
,
/
,
-
,
|
,
+.
,
x.
,
+
,
fne
,
fsw
,
fnw
,
fse
,
tn
,
ts
,
te
,
tw
,
ys
,
ye
,
yn
,
yw
,
anw
,
ane
,
asw
,
ase
,
p


All named square rectilinear tiles (two connections per side)

In[]:=
Labeled[Graphics[{{LightGray,Rectangle[-.5{1,1},1.5{1,1}]},SquareRectilinearTile[#]},ImageSize50],#]&/@SquareTileNames[]
Out[]=

\
,
/
,
-
,
|
,
+.
,
x.
,
+
,
fne
,
fsw
,
fnw
,
fse
,
tn
,
ts
,
te
,
tw
,
ys
,
ye
,
yn
,
yw
,
anw
,
ane
,
asw
,
ase
,
p


Tilings

Tiles can be assembled in lots arrangements, for example, random, regular, or filling arbitrary areas:

Checkerboard tiling

In[]:=
ShowTiling[​​CheckerboardTiling[8],​​{{EdgeForm[Gray],FaceForm[None],Rectangle[]}},​​ImageSize200]
Out[]=

Surround tiling

In[]:=
ShowTiling[​​SurroundTiling[8],​​{{EdgeForm[Gray],FaceForm[None],Rectangle[]}},​​ImageSize200]
Out[]=

Offset surround tiling

Random subdivision tiling

Recursive square subdivision tiling

Subdivision fill tiling

Recursive triangle subdivision tiling

Tiling Patterns

Random subdivision with a single motif

Random subdivision with a single motif randomly rotated

Random subdivision with a multiple motifs

Subdivision fill with randomly chosen motifs

Various single-motif checkerboard tilings

Various multiple-motif checkerboard tilings

Various subdivision fills

Various recursive square tilings

Various recursive triangle tilings

Patterns with rectilinear motifs

Exhaustive pattern generation

Generate in a separate notebook every combination of arc motif pairs on a checkerboard tiling.
This takes a while to run, but you can interrupt it at any time.

Bridges Paper Figures

Figures from the Bridges 2018 paper Multi Scale Truchet Patterns.

Figure 1

Figure 2

Figure 3

Figure 4

Figure 5

Figure 6

Figure 7

Figure 8

Figure 9

Figure 10

Figure 11

Figure 12

Figure 13

Figure 14

Figure 15

Figure 16

Figure 17

End Figure

Miscellaneous Additional Topics

Square arc motifs with various numbers of connections per side

Pattern with 3 connection points per side (not multi-scale)

ShowTiling doesn’t work here because the parity works differently with tiles with three connection points.

CITE THIS NOTEBOOK

Discovering Multiscale Truchet Patterns with the Wolfram Language​
by Christopher Carlson​
Wolfram Community, STAFF PICKS, August 13, 2024
​https://community.wolfram.com/groups/-/m/t/3247480