Mandelbrot Set
Nobody drew the Mandelbrot set. It is the answer to one question, asked once for every point of the plane: start at , apply
forever, and ask whether the numbers stay bounded. The set is the collection of for which they do. Everything on the screen comes out of that line — the cardioid, the discs bolted onto it, the antenna along the negative axis, the filaments, and the copies of the whole thing buried in the filaments.
Drag to pan, pinch or scroll to zoom; double-click to zoom in on a point.
Orbit follows the pointer and draws the sequence for the point
under it, then reports what it settles on. Plane switches between the two pictures below,
taking from wherever the Mandelbrot view is centred; in Julia mode the inset is the
parameter plane in miniature, and dragging its marker moves live. With the canvas
focused, the arrow keys pan, + and − zoom and 0 refits. Expand fills the screen;
Esc leaves it. The address bar records the mode, centre and magnification, so a view you
find is a link.
Two is the whole test
Whether a sequence stays bounded forever sounds like something no finite computation can decide. For this one it nearly is: a single step with already proves escape.
Suppose and some with . Then
so the excess over more than quadruples at every step and the orbit runs away. If instead then is already outside, and keeps it there. Either way the orbit of is bounded exactly when it never crosses the circle of radius , and itself sits inside the closed disc of radius .
That turns an infinite question into a finite one at every pixel that escapes — and settles nothing at all about the ones that do not. For those you iterate to whatever budget the slider allows and then give up, which is why the black in any of these pictures means not yet proved to escape rather than proved to stay. Push the iteration slider up in a filament and watch some of the black turn out to be thin.
Colouring by when, not whether
Colour the outside by how long it took to cross, and the escape time is an integer, so the picture comes out in hard bands. The fix is to overshoot deliberately. Iterate to a generous radius — this viewer uses — and record where the orbit actually landed, because how far past it went says where between and the real crossing was:
Land exactly on the circle and . Overshoot all the way to , the modulus one more squaring would have produced, and — the count the previous step would have given. Since out there, the two agree wherever they meet, and the bands close up.
There is a reason it works so cleanly. Writing for the escape rate — the Green’s function of the complement of — the definition rearranges to
so up to an additive constant is of a genuine potential. The colour bands are its level sets, and each one is a halving of the escape rate. Nothing about them depends on beyond that constant, which is worth checking rather than assuming: at the two agree to about , while at the error is — enough to see the bands breathe.
Julia sets, and what the Mandelbrot set indexes
Swap what varies. Fix one , let range over the plane instead, and apply the same escape test: that picture is the filled Julia set of that one map — the starting points whose orbits stay bounded.
The two pictures are locked together by a dichotomy with no third case. is connected if the orbit of the critical point is bounded, and otherwise it is totally disconnected: a Cantor dust, no interior, no piece joined to any other. But “the orbit of is bounded” is the definition of , so the Mandelbrot set is exactly the set of whose Julia set is connected. It is a catalogue, one entry per parameter, of which of the two you get.
Switch the viewer to Julia and the inset appears: the parameter plane in miniature with a marker on the current . Drag the marker across the boundary and the set shatters — one connected piece inside, dust a hair’s breadth outside. It starts on Douady’s rabbit, , the centre of the period-3 bulb.
The bulbs are counting
The interior of is where an attracting cycle exists. The main cardioid is the for which has an attracting fixed point: solve and require the multiplier , then parameterise to get the boundary
which is a cardioid. The disc bolted to its left, , is where that fixed point has gone unstable and a 2-cycle has taken over.
Every other bulb hangs off the point of the cardioid where the multiplier is a root of unity , and inside it the attracting cycle has period . Turn on Orbit and hover: the viewer runs the orbit, lets it settle, and reports the period it lands on. The big disc gives 2, the round bulbs above and below give 3, and from there Devaney’s observation is visible directly — the antenna growing out of the bulb has spokes.
In Mandelbrot mode that overlay takes a liberty. The orbit lives in the dynamical plane and the picture underneath is the parameter plane, so where the orbit falls relative to the black means nothing; only the point you picked is a . Switch to Julia and the same drawing is honest, because there the plane on screen is the one the orbit moves in.
What the boundary is like
Douady and Hubbard proved in 1982 that is connected: however thin the filaments get, they are attached, and nothing floats free. Shishikura proved in 1998 that its boundary has Hausdorff dimension — the dimension of the plane itself — which is the precise reason every zoom finds more structure and never bottoms out. The area is known only numerically: pixel counting puts it near , there is no closed form, and the best proved upper bounds are still some way above the measured value.
The small copies of the whole set scattered through the filaments are not artefacts and not quite coincidences. They come from renormalisation: within those regions some iterate of the map, restricted to a small disc, behaves like a quadratic map all over again, and Douady and Hubbard’s theory of polynomial-like maps says such a thing carries its own copy of . The copies are the set genuinely recurring — never identically, since each is decorated differently by the filaments it sits in.
The first picture of it was a rough plot by Brooks and Matelski in 1978, made while studying Kleinian groups; Mandelbrot’s own images followed in 1980.
Notes on the viewer
The image is built by progressive refinement — a grid of 16×16 blocks first, then 8, 4, 2, 1, each pass computing only the pixels the previous one skipped. Those passes cost of a full image, which is exactly one image, so the coarse preview is free rather than paid for. The work is then sliced across frames on a time budget, so a drag stays responsive at any iteration count, and while a gesture is running the last finished image is blitted under the new transform instead of being recomputed — the arithmetic starts once the gesture stops.
Interior points are the expensive ones: they cost the entire iteration budget, since nothing short of running out proves an orbit bounded. Three shortcuts take most of that back. The main cardioid and the period-2 disc are the two pieces of the interior with closed forms, and both are tested algebraically before any iteration. Everything else the two tests miss — the filaments of the interior, the small copies — is caught by period checking: hold a reference point, refresh it at powers of two, and declare the point interior as soon as the orbit comes back to it. Over 200,000 random parameters at a budget of 6,000 iterations the shortcuts and plain iteration disagree nowhere.
Arithmetic is double precision throughout, and the zoom stops at because that is where doubles stop carrying the picture. Near consecutive representable numbers are about apart. A pixel is wide at — four distinct values across it, and the image is clean; at , where neighbours start landing on the same number and the fine structure goes grainy; and at , where whole rows of pixels collapse onto one value and the view is bands of noise. The readout says when you are into that range. Getting past it means perturbation methods — one orbit computed in high precision, and a series in the small differences for every other pixel — which is what deep-zoom software does and this viewer does not.
Colours come from five stops defined in the site’s stylesheet, baked into a 2,048-entry lookup table and cycled by , so the drawing follows the light and dark palettes without repeating them in JavaScript.