The Hitchhiker's Guide to the Mandelbrot Set
This is a work-in-progress interactive explanation. I'd love feedback! You can reach me at @blinry or email@example.com.
Maybe you've seen an image of the Mandelbrot Set before. It's trippy, it's wonderous, it's beautiful. Here it is, have a look:
Click to zoom.
The Mandelbrot Set is a so-called fractal, which means it's self-similar. Zooming in, you can always find smaller copies of itself. Maybe you encountered some yourself when exploring the above image?
But what does this image mean? How is it constructed? It all begins with a sleeping bunny.
Part 1: What is the Mandelbrot Set?
The Mandelbrot Set is the result of repeated application of a very simple rule.
I'll attempt to explain to you how this works in a purely visual way, without any math. If, on the other hand, the math interests you, you can read up on this in the gray columns, but this is purely optional!
In our little world, there is a bunny, and a flag. You can place the flag everywhere you want. The bunny has its own free will. Psssst, it's still asleep! ... z z Z Z Z
The flag represents something which mathematicians call a complex number. It's just like a normal number, but is has a funny little extra number attached to it, which tells you how far it is above or below the number line. Mathematicians call it the imaginary component, and mark it with an i. For example, in the demo below, f = ?. Try placing the flag on -1.0+0.5i!
Drag the flag around. No surprises here.
The bunny always sleeps in the center of the lawn. But look, it woke up! It will now start to walk and hop around. The first thing it always does is to walk to the position of the flag. We call this movement Step 1.
The bunny's position is another complex number, which is initially b0 = 0. The walk movement is equivalent to adding f, so the next position will be b1 = f.
Pull the slider to Step 1, then drag the flag around.
Step 2 consists of two movements: First, the bunny will hop! It has a very particular way of hopping: It hops so that its angle to the right-direction doubles, and the distance to its sleeping position squares. Intuitively, if its distance to its sleeping position is less than 1, it will hop a little bit closer, and if the distance is larger than 1, it will hop a little bit farther away.
The hop movement is equivalent to squaring the current position. The square of a complex number can be calculated using the binomial formula and the fact that i2 = -1: (x + yi)2 = x2 + 2xyi + (yi)2 = x2 - y2 + 2xyi. The behaviour described on the left can be explained using the polar form of complex numbers.
Pull the slider to Step 1.5, then drag the flag around.
The second movement of Step 2 is another walk. The bunny will walk in the same direction and distance as it initially walked towards the flag:
After squaring b1, we add f again. This gives us b2 = b12+f.
And after that, the bunny just repeats these two movements: A hop, a walk, another hop, another walk. Let's look at how this looks for up to Step 4:
Let's get rid of the half-steps! From now on, we will treat the hopp-and-walk as a single movement.
Here's the same demo as before, but the the bunny directly goes full steps. The flag positions of this and the last demo are in sync, so you can compare the resulting path.
If we want to calculate the new position bi+1, and we know the old position bi, we can calculate bi+1 = bi2+f. This is the only formula needed to calculate the Mandelbrot Set!
And NOW it gets exciting! What if we let our bunny do many, many, steps? Like, 100 of them? Look:
Pull the slider to Step 100, then drag the flag around.
Can you find another spiral? A star? A triangle?
Whaaaat. Crazy patterns everywhere!
You can see that for some flag positions, the bunny escapes the dashed circle (into FREEEEDOM!), while for others, it stays inside. Let's do an experiment: In the next demo, if the bunny's path leads it to freedom, we will color the current flag position white. If the bunny stays inside the circle, we will color it black (because it's so sad!)
This is the definition of the Mandelbrot Set: It consists of all flag positions for which the bunny does not escape, if it does an infinite number of steps. Here, we can only approximate: If the bunny hasn't escaped after 100 steps, it's probably close to the Mandelbrot Set, and we will color the flag's position black.
Drag the flag around to scribble.
Why, helllll~o! You drew yourself a teeny tiny Mandelbrot set!
Let's add more color. So far, we only used white (for when the bunny escapes) and black (for when it doesn't). In the next demo, let's count how many steps it took the bunny to escape from the circle. If it took one step, we color the flag's position red. If it took two, we color it orange, and so on. You can see the colors we use below the step slider.
Drag the flag around to scribble.
And that's really all there is to it! Repeated application of a very simple rule, leading to incredibly complex detail.
Here's the last demo for now, which does all the drawing for you, and where you can zoom in. This one has a lot to explore.
Some things you can try:
- What happens to the path at the centers of the outer "bulbs"?
- Can you find out which period numbers are connected to each bulb? Do you see a relation to the "antennas" extending outward from that bulb?
- Zoom in on one of the bulbs. What happens to the path at the centers of its sub-bulbs?
- What is the period of the bulbs going "outward"? What happens if you follow a number of them?
Click to zoom. Middle-click to zoom out.
More fractals, for example:
The Tricorn: bi+1 = (bi*)2+f
The Burning Ship: bi+1 = (|Re(bi)| + |Im(bi)|)2+f
What happens for other exponents than 2?
The Multibrot: bi+1 = bi6+f
And what the hell are Julia Sets? Follow me on Twitter to get updated when the full thing comes out: @blinry
Thanks for reading!