Fractals

Circle inversions and Kleinian groups

Groups of Möbius maps: where their orbits pile up, the limit set appears — a lace of circles («Indra's Pearls»).

  • GPU shader
  • looping animation
Open in the editor →

Two facing mirrors make an endless corridor. Make them round, and reflection becomes inversion, turning a circle inside out. Reflections of reflections shrink, nest and pile up into a lace of circles, the limit set.

How it works

Möbius maps, built from an even number of inversions, send circles to circles. A few such maps with all their products form a group; if none is arbitrarily close to the identity, the group is Kleinian, and every orbit piles up onto one fractal, the limit set.

z ↦ (az + b) / (cz + d), ad − bc ≠ 0 inversion in circle (o, r): z ↦ o + r² / (z̄ − ō) Maskit slice: a(z) = μ + 1/z, b(z) = z + 2

The shader works backwards, like the artist Jos Leys. The group has a fundamental domain whose copies cover everything but the limit set. Each pixel is pushed back one generator at a time; the step count is its “tile” and colour. The accumulated stretching gives the distance to the lace for “distance” colouring and “Glow”. Points still outside after “Iterations” lie on the lace.

In the “Maskit slice” b shifts the plane by 2 and a carries the unit circle at 0 to the one at μ; “Parameter a” is Re μ, “Parameter b” sets Im μ = 2 + b/4. At a = b = 0, μ = 2i and the limit set is exactly an Apollonian gasket laid in a strip. “Indra’s pearls” pairs four circles at ±1 and ±i, left with right and bottom with top: each circle holds three smaller ones, each of those three more, leaving a Cantor dust of pearls. The “Apollonian packing” follows Iñigo Quílez: fold the plane into a square cell, invert in a circle, repeat.

A bit of history

Felix Klein and Henri Poincaré studied such groups in the 1880s. Poincaré named one class Fuchsian, after Lazarus Fuchs; Klein objected, so the next class became Kleinian. Klein and his student Robert Fricke drew limit sets by hand. Computers brought real pictures: David Mumford, Caroline Series and David Wright gathered theirs in Indra’s Pearls (2002), named after the Buddhist net of Indra, whose every knot holds a pearl reflecting all the others. The first picture of the Mandelbrot set appeared in 1978 in a paper on Kleinian groups by Robert Brooks and Peter Matelski.

What to tweak

  • “Speed”, “Parameter a” and “Parameter b” all 0: the Apollonian gasket in a strip. Move a and it skews into necklaces of beads; raise b and they part.
  • “Indra’s pearls”, “Speed” 0, “Parameter b” 0: all four circles are perpendicular to one circle, and the dust lies on it; at “Parameter a” 1 they touch and the dust fills the circle. Any other b knocks it off.
  • “Colouring” “distance” with “Glow” near 1: tiles sink into the background, only the lace shines.
  • A “Relief” effect in “Mode” “metal” on top turns the lace into chased silver.

Parameters

Group
Apollonian packing · Maskit slice · Indra's pearls
Parameter a
Maskit: Re μ; pearls: circle radius (1 — kissing); Apollonian: inversion strength
Parameter b
Maskit: Im μ above the slice boundary; pearls: twist of the second pair; Apollonian: cell shape
Iterations
Zoom
Centre X
Centre Y
Colouring
tiles · distance · trap
Colour density
Lines
Tile borders crowding into the limit set
Glow
Speed
Turns of the parameters round a small circle per loop