About the Julia Set Explorer
This simulation renders Julia sets in real time on the GPU using a WebGL fragment shader. For a fixed complex constant c, every pixel maps to a starting point z₀ in the complex plane and is iterated under the quadratic map z ↦ z² + c. Points whose orbits remain bounded form the filled Julia set and are drawn black; points that escape are coloured by a smooth, continuous escape-time value, exposing the fractal's intricate, self-similar boundary.
The Re(c) and Im(c) sliders reshape the fractal instantly as you vary the constant c, while the Max iterations slider trades render speed for finer boundary detail. Animate c orbits the constant around a circle of radius 0.7885, and presets jump to famous shapes such as the dendrite, rabbit and Cantor dust. Beyond their beauty, Julia sets are a cornerstone of complex dynamics and a vivid illustration of deterministic chaos.
Frequently Asked Questions
What is a Julia set?
For a fixed complex number c, the Julia set is the boundary between starting points z₀ whose orbits under z ↦ z² + c stay bounded and those that fly off to infinity. The simulation colours the escaping region by how quickly it diverges, leaving the bounded filled set in black.
How does the simulation compute the image?
Each pixel is a complex number z, and a GPU shader iterates z = z² + c up to the Max iterations limit. If the magnitude of z stays below the bailout radius of 256, the pixel belongs to the set and is black; otherwise it is shaded by a smooth escape-time value. Running this per pixel on the GPU keeps the render interactive.
What do the Re(c) and Im(c) sliders do?
They set the real and imaginary parts of the constant c, which range from -1 to 1 in steps of 0.001. Every Julia set is defined by a single value of c, so dragging either slider continuously morphs the fractal into a completely different shape in real time.
What is the key equation behind it?
The map is z(n+1) = z(n)² + c, applied repeatedly from each pixel's starting point. To avoid colour banding, the simulation uses a smooth iteration count: mu = n + 1 - log(log(|z|)) / log(2), which interpolates between integer escape counts for continuous shading.
What does the Animate c button do?
It sweeps the constant c around a circle of radius 0.7885 in the complex plane, a classic Julia animation. Because the shape depends entirely on c, the fractal continuously blooms and folds through a sequence of related forms as the point traces the circle.
How is the Julia set related to the Mandelbrot set?
The Mandelbrot set is the catalogue of all c values for which the corresponding Julia set is connected, rather than scattered into disconnected dust. By the Douady–Hubbard theorem, the Julia set J(c) is connected if and only if c lies inside the Mandelbrot set, so the two are deeply intertwined.
What do the presets show?
Each preset jumps to a famous value of c. Dendrite (-0.8, 0.156) is a branching tree, Siegel disc (-0.7269, 0.1889) contains a rotation domain, Rabbit (-0.4, 0.6) is Douady's rabbit, Quadratic (0.285, 0.01) gives a fattened spiral, and Cantor dust (0.45, 0.1428) lies outside the Mandelbrot set, so it disconnects into infinitely many specks.
Why does the Max iterations slider matter?
Iterations range from 50 to 1000. Points near the set's boundary take many iterations to reveal whether they escape, so a low limit blurs fine filaments while a high limit sharpens them at the cost of render speed. Deeper zooms generally need more iterations to resolve detail.
Is this a physically or mathematically accurate rendering?
Yes, within the limits of finite precision. The shader performs the exact complex iteration z = z² + c with a bailout magnitude of 256 and standard smooth-colouring mathematics. The only approximations are the finite iteration cap and single-precision floating point, which limit how far you can zoom before artefacts appear.
Why are Julia set boundaries linked to chaos?
On the boundary of the filled set, two starting points that are arbitrarily close can have wildly different fates under iteration: one stays bounded while the other escapes. This sensitive dependence on initial conditions, combined with a fully deterministic rule, is the defining signature of deterministic chaos.
What are Julia sets useful for in the real world?
Beyond generative art, the iteration theory underlying Julia and Mandelbrot sets informs antenna design, image and signal compression, and models of dynamical systems in physics and biology. They are also a standard teaching example for fractal geometry, complex analysis and the mathematics of chaos.