Julia sets, first described by Gaston Julia, have fascinating mathematical properties and are closely related to the Mandelbrot set. Besides all that math, though, they're also just really cool to look at.
Left click + drag to change shape (when zoomed out)
Right click + drag to pan
Scroll to zoom
Touch to change shape (when zoomed out)
Pinch to zoom and pan
HOW IT WORKS
The math behind Julia sets is not complicated, but at the same time, it's pretty abstract and doesn't have a clear real-world analogue. Their importance is less behind the fractals themselves, but the fact that we can model them as easily as we can.
For each pixel in the Julia Set, we repeatedly compute a mathematical function¹ and see how fast it grows. If it grows faster than a specified limit, we color that pixel depending on how long it took to reach that limit. Otherwise, we color it black.
You may notice that for some configurations, there are large sections of black pixels. All of these pixels grow slow enough that they never reach the boundary. In fact, if you gather all of the configurations that have these swaths of black pixels, you get the Mandelbrot Set.
¹ Specifically, we iterate the function z² + c, where c is the pixel selected with the mouse and z is the pixel currently being rendered.
If you zoom in enough, you may notice that the same patterns appear on multiple levels of the Julia Set; this is no visual glitch. Julia Sets are self similar, meaning that when you zoom in, they look like a rotated version of themselves.
We also say that the Julia set is a fractal. We often assume that fractals are self-similar, and although that's true in this case, in general it's not. Here, fractal just means that the dimension of the Julia Set is somewhere between 1 and 2. You may be tempted to say that it's 2-dimensional, but this is technically untrue, since it has an infinite amount of holes and thus has area zero. At the same time, it's more complicated than a 1-dimensional line, so it has to sit somewhere in the middle.