Drag to move by a hyperbolic isometry, scroll or pinch to zoom. Click a marked point to center it. The tiling is redrawn around wherever you are looking; press 0 or the default-viewpoint button to return.
Stage 1: fundamental domain
An octagon with boundary word a b a−1b−1c d c−1d−1, read counterclockwise from the base vertex v0. Hold Shift and drag a vertex to deform it; the other vertices adjust so paired sides keep equal length and the angles still sum to 2π.
Show the bi-infinite chain …xxx… through v0:
Generators in PSL(2, ℝ)
Each matrix shifts the chain …xxx… through v0 by one step (it sends v0 to the end of the x-edge leaving v0). Using the same base vertex for all four makes the relation hold exactly; for a this is the chain through the octagon's own a-edge. The default viewpoint is centered at v0, and the matrices are written in its coordinates: v0 is 0 in the disc and i in the half-plane. They act on the half-plane by z ↦ (pz + q)/(rz + s), and on the disc through the Cayley map w = i(1 + z)/(1 − z).
Matrices as text
Stage 2: random walk
Hold Shift and click inside the octagon to choose the starting point P. Each step multiplies by one of a, a−1, b, b−1, c, c−1, d, d−1 (numbered 1 to 8) with probability 1/8.
Draws P, f(s1)P, f(s1)f(s2)P, …, f(s1)⋯f(sn)P. Every trial is kept.
Computes Sk = ⋃s s·Sk−1 and fk(Q) = Σs ⅛ fk−1(s−1Q), starting from S0 = {P}, f0(P) = 1. Copies of the same point reached by different words are merged.
Draw each point of Sk as:
Brightness:
Each point Q gets a red segment of constant brightness, starting at Q and pointing toward the center of the view, of length c·f(Q). A segment longer than the distance to the center stops at the center.