Escape‑time instrument · ℂ → ℂ · two sets, one recurrence · no.01

zn+1=zn2+c

Iterate a quadratic map on the complex plane and keep the points whose orbit never runs away. Do it while varying c and you draw the Mandelbrot set; freeze c and vary the starting point z₀ and you draw a Julia set. Every pixel below is computed at load — nothing is an image.

engine
—
iterations
—
samples
—
last pass
—
Set 01

Mandelbrot set

M = { c ∈ ℂ : orbit of z₀ = 0 under z ↦ z² + c stays bounded }

—
double-precision floor
center re
—
center im
—
magnification
—
render
—

drag = pan · wheel = zoom at cursor · click = feed c into Jc

Set 02

Julia set Jc

Jc = { z₀ ∈ ℂ : orbit of z₀ under z ↦ z² + c stays bounded }, c fixed

—
double-precision floor
center re
—
center im
—
magnification
—
render
—

c is inherited from the set on the left

Critical orbit

0 ↦ c ↦ c²+c ↦ … of the map z²+c

—

Colour engine

continuous escape-time colormaps · cyclic

Depth & resolution

bailout |z| > 10⁵ · smooth μ = n+1−log₂log|z|

—

The dictionary

why these two panels are one picture

M indexes every c for which the orbit of 0 survives. For that same c, Jc is the set of surviving z₀.

c ∈ M ⟺ Jc is connected. Step outside the black and the Julia set shatters into a Cantor dust — the badge on the rail tests this live from the critical orbit.

quadratic family · one complex parameter · Fatou–Julia theory

How to read the picture

field notes · six short readings

01 · one question, asked twice

Pick a complex number c. Start at zero. Iterate z ↦ z² + c forever. Either the orbit stays inside some finite circle or it runs off to infinity — there is no third answer, and the boundary between the two possibilities is where all the structure lives.

Ask the question with the starting point pinned at 0 and you get M. Pin c and let the starting point roam and you get Jc. The left panel is therefore an index of the right panel: every point of the black region names a connected Julia set, and the tiny copies of itself scattered along its coast name the same thing again, at smaller scale, forever.

02 · why the bailout is 2

Once |z| exceeds 2 (and |c| ≤ 2), the iteration grows monotonically and without bound:

|zn+1| ≥ |zn|² − |c| > |zn|

So membership is decided by a single comparison, and M is contained in the disc |c| ≤ 2. This renderer bails at |z| > 10⁵ instead, purely so the smooth-colouring formula stays accurate near the boundary.

03 · killing the bands

Raw iteration counts are integers, so flat colour gives striped contour bands. The fix is a fractional correction:

μ = n + 1 − log₂ log|zn|

which estimates how far past the bailout the orbit would have gone. Switch smooth off in the console and watch the banding return.

μ rampcyclic · 3 loops

04 · connected or shattered

The badge beside the map iterates the critical orbit and reports the period of the attracting cycle it falls into. Period 1 → Jc is a quasi-circle; period 3 → the Douady rabbit; outside M → a Cantor set, totally disconnected.

05 · bulbs, ribs and the period dictionary

The main cardioid is the locus of c with an attracting fixed point. Every rational ray leaving it lands on a bulb whose critical orbit is periodic with that denominator, and the tiny Julia set in that bulb has the same period.

2⁄5 rib1⁄2 bulb · basilica1⁄3 · rabbit2⁄7 · airplanegolden mean · Siegel disc

Try the preset row under the Julia panel — each thumbnail is a real render of that parameter.

06 · the precision ceiling

IEEE‑754 doubles carry about 16 significant digits. Near 10⁻¹³ of a unit per pixel the grid starts to quantize: the image turns faceted, then flat, then simply false. A red precision floor flag appears in each panel when you get there.

Going deeper honestly requires perturbation rendering against a high-precision reference orbit, or arbitrary-precision arithmetic — a different instrument entirely.