Mandelbrot set
M = { c ∈ ℂ : orbit of z₀ = 0 under z ↦ z² + c stays bounded }
- center re
- —
- center im
- —
- magnification
- —
- render
- —
drag = pan · wheel = zoom at cursor · click = feed c into Jc
Escape‑time instrument · ℂ → ℂ · two sets, one recurrence · no.01
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.
M = { c ∈ ℂ : orbit of z₀ = 0 under z ↦ z² + c stays bounded }
drag = pan · wheel = zoom at cursor · click = feed c into Jc
Jc = { z₀ ∈ ℂ : orbit of z₀ under z ↦ z² + c stays bounded }, c fixed
c is inherited from the set on the left
0 ↦ c ↦ c²+c ↦ … of the map z²+c
—
continuous escape-time colormaps · cyclic
bailout |z| > 10⁵ · smooth μ = n+1−log₂log|z|
—
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 theoryfield notes · six short readings
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.
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.
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.
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.
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.
Try the preset row under the Julia panel — each thumbnail is a real render of that parameter.
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.