Skip to main content
BVDART Logo
← All guidesGenerative systems

Julia sets

A quadratic Julia-set image explores repeated z² + c with a fixed complex parameter c and a different starting z at each pixel.

Change a shared constant, then inspect individual starting points

Each pixel starts a different orbitThe same c is used everywhere
One constant for the whole image
The selected starting point
First 16 steps of the selected Julia orbit|z| = 2ReIm|z| = 0.221
z₀ = 0.250 + (0.150)i
c = -0.800 + (0.156)i
zₙ₊₁ = zₙ² + c

This starting point escapes after 72 steps.

Moving the crosshair tests one starting point. Moving c changes the recurrence at every pixel. Dark areas are unescaped samples in this finite test.

Try this Choose c = 0. The filled Julia set is the unit disk: starting magnitudes below 1 shrink, and those above 1 grow. Move the crosshair to compare both.

Move c continuously from its current value through connected and disconnected Julia structures, then return. Use any control to take over.

What to try
  1. Choose c in the small parameter plane or use its real and imaginary controls.
  2. Set c = 0 and move the crosshair inside and outside the unit disk.
Open in the Lab ↗

What to look for: The main image varies z₀ while every pixel uses the same c. Changing c reshapes the whole field; moving the main crosshair only selects an orbit to inspect.

How it works

The distinction from Mandelbrot rendering is what varies across the image. Mandelbrot pixels choose c and start at zero. Julia pixels choose the initial z while c stays fixed. Changing the real or imaginary part of c can transform the entire structure.

The iteration limit and escape coloring are rendering decisions. Center and zoom choose the region viewed; they do not change the recurrence. A useful exploration keeps most parameters fixed while moving one component of c.

Use it in the Lab

Generate a Julia source in the Lab, preserve its complex parameter and viewport in a recorded chain, and process the output with a palette or texture treatment.

Limits & distinctions

The preview is a finite escape-time rendering. Its colors and unescaped areas are visual encodings of the calculation, not a proof of exact set membership.

Further reading

Julia sets represent one of the most beautiful and mathematically significant families of fractals in complex dynamics. Named after French mathematician Gaston Julia, who studied them in the early 20th century, these sets reveal the intricate boundary between order and chaos in iterative systems.

The Mathematical Foundation

Julia sets are generated using the same iterative formula as the Mandelbrot set, but with a crucial difference in perspective. The iteration formula is:

z(n+1) = z(n)² + c

For the Mandelbrot set, c varies across the complex plane while z starts at zero. For Julia sets, c is fixed at a specific complex value, and z₀ varies across the plane. Each different value of c produces a completely different Julia set, creating an infinite family of related fractals.

The Deep Connection to the Mandelbrot Set

The relationship between Julia sets and the Mandelbrot set is profound and elegant. The Mandelbrot set serves as a map or index of all possible Julia sets. Each point c in the complex plane corresponds to exactly one Julia set:

  • If c is inside the Mandelbrot set, the corresponding Julia set is connected—a single, unbroken shape
  • If c is outside the Mandelbrot set, the Julia set is a Cantor dust—an infinite collection of disconnected points
  • If c is on the boundary of the Mandelbrot set, the Julia set exhibits the most complex and intricate structures

This relationship means that exploring the Mandelbrot set is essentially exploring the parameter space of all Julia sets. The famous bulbs and tendrils of the Mandelbrot set correspond to regions where Julia sets share similar topological properties.

How Different c Values Shape Julia Sets

The choice of c dramatically affects the Julia set's appearance and structure:

Values Near the Origin

When c is close to zero (deep within the main cardioid of the Mandelbrot set), Julia sets tend to be nearly circular with smooth, blob-like shapes. As c moves away from the origin, the sets develop increasingly complex features.

Values on the Real Axis

Real values of c (where the imaginary part is zero) produce Julia sets with reflection symmetry across the real axis. The classic value c = -0.8 creates a striking pattern resembling a branching tree or lightning bolt.

Values Near the Boundary

Values of c near the boundary of the Mandelbrot set produce the most visually stunning Julia sets, with intricate spirals, dendrites, and self-similar structures at every scale. Popular choices include c = -0.4 + 0.6i (creating spiral patterns) and c = 0.285 + 0.01i (producing delicate, feather-like structures).

Filled Julia Sets vs. Boundary Sets

There are two ways to visualize Julia sets, each revealing different aspects of their structure:

The Filled Julia Set

The filled Julia set consists of all points z₀ for which the iteration remains bounded—that is, points that don't escape to infinity. This is typically rendered as a solid region, often in black or a single color, showing the overall shape and connectivity of the set.

The Julia Set Boundary

The true Julia set is technically just the boundary of the filled set—the infinitely thin edge separating points that escape from those that remain bounded. This boundary is where the fractal's self-similar detail lives, and it has the remarkable property of being exactly the same at every scale. The boundary is a fractal curve with infinite length but zero area.

Coloring Techniques and Visualization

While the mathematical Julia set is a binary concept (a point either belongs or doesn't), visualization techniques add color to reveal the dynamics of the iteration process:

Escape Time Coloring

The most common technique assigns colors based on how quickly points escape to infinity. Points that escape after few iterations receive one color, while those that take many iterations receive another. This creates the characteristic bands and gradients surrounding the filled set, revealing the basin of attraction's structure.

Continuous Coloring

To avoid the banding effect of discrete iteration counts, continuous coloring algorithms use the magnitude of the final iteration value to interpolate between colors smoothly. This produces gradient-like transitions that emphasize the fractal's flowing, organic quality.

Interior Coloring

Points within the filled set can also be colored based on their behavior—for example, by measuring how close they come to escaping, or by analyzing the orbit's trajectory. This reveals internal structure that would otherwise be hidden in a solid color.

Aesthetic Properties and Visual Appeal

Julia sets possess several qualities that make them enduringly popular in digital art and mathematical visualization:

  • Infinite detail: No matter how far you zoom in, new structures continue to emerge
  • Self-similarity: Patterns repeat at different scales, creating visual harmony
  • Organic forms: Despite their mathematical origin, Julia sets often resemble natural phenomena like clouds, coastlines, or biological structures
  • Symmetry: Many Julia sets exhibit rotational or reflection symmetry, creating balanced compositions
  • Variety: The infinite parameter space means endless unique forms to explore

The interplay between mathematical precision and visual complexity makes Julia sets a perfect subject for generative art, where algorithmic rules produce aesthetically compelling results that would be impossible to design manually.

Sources & references

Guide updated