Julia Sets
Fix the parameter, vary the starting point — the mirror image of the Mandelbrot construction next door.
LINKED EXPLORER
Mandelbrot chooses the parameter; Julia reveals its world
Click anywhere in the Mandelbrot plane. That point becomes c in z ← z² + c, and the Julia set on the right is redrawn immediately.
History
Gaston Julia and Pierre Fatou independently developed the theory of iterated rational functions during the First World War — Julia famously working in part from a hospital bed, publishing his 268-page memoir on iteration in 1918. The subject then fell into relative obscurity for over fifty years, lacking any way to actually visualise what Julia and Fatou could only describe with theorems.
Julia’s 268-page memoir was, remarkably, largely complete before computers existed to draw a single one of the sets it describes — pure analysis, verified visually only decades later.
Construction
Exactly the same escape-time test used for the Mandelbrot set, with one difference: here is fixed and varies over the plane (for Mandelbrot, is fixed and varies). This single swap is why the two chapters share almost identical code — and it changes what the picture means: a Mandelbrot pixel asks “is this well-behaved?”, while a Julia pixel asks “is this starting point well-behaved, for one fixed ?”
A quick worked example with this chapter’s own , starting from : ; squaring and adding again gives ; five iterations in, — still comfortably inside , so this particular turns out to belong to the set. Nudge just slightly and the same handful of steps can send the orbit past and off to infinity instead; the boundary between the two behaviours is the fractal in the figure below.
The parameter used here, , sits in a thin filamentary region of the Mandelbrot set and produces one of the most famous “dendrite-adjacent” Julia sets — delicate, spiral, and connected, but only just.
Python implementation
Pseudocode first
for each pixel z0 {
z = z0
repeat until |z| > 2 or the limit is reached
z = z*z + c
colour by escape time
}
The executable version keeps the same shape; shared plotting/export details live in fractalfair_helpers.py.
z = grid_of_starting_points()
for i in range(max_iter):
z[alive] = z[alive]**2 + c
escaped = alive & (abs(z) > 2)
time[escaped] = i + 1
alive &= ~escaped
c :: Complex Double
c = (-0.7) :+ 0.27015
escapeTime maxIter z0 = go 0 z0
where
go n z | n >= maxIter = 0
| magnitude z > 2 = fromIntegral n / fromIntegral maxIter
| otherwise = go (n+1) (z*z + c)
Figure: Coloured by smoothed escape time on an ocean palette. The single connected filigree structure is characteristic of parameters drawn from a thin filament of the Mandelbrot set.