Fractals

I like to render fractals with self-programmed software from time to time. A fractal is a precisely defined mathematical object (its definition uses two types of dimension, the topological dimension and the Hausdorff dimension). However, we won't go into details about this rather abstract definition. Fractals are often infinitely complex and self-similar geometric objects. This means, that you can zoom into a fractal as much as you like, and you'll always find new structures roughly similar to the whole fractal. This is also the case for the images on this page.

A typical example of a fractal that can be rendered using a computer is the Mandelbrot fractal. It is named after Benoît Mandelbrot, the father of fractal geometry. The following image shows one of the earliest pictures I rendered using my own software. Shown is a part of the Mandelbrot fractal.

You can find all my fractal images on my flickr-album:
Fractals album

mandelbrot fractal
Mandelbrot fractal, programmed in C# at the start of 2015. My software uses a similar color gradient as the commercial software ultra fractal.

Contents

Mandelbrot Fractal

The Mandelbrot fractal is a subset of the complex numbers. One can imagine complex numbers as some sort of two-dimensional numbers: while normal numbers (real numbers) can be listed on a line, complex numbers live in a plane, the so-called complex plane. Each pixel in an image of the Mandelbrot set corresponds to a complex number.

We can check for each complex number c whether or not it is part of the Mandelbrot set by looking at the following sequence:

All numbers c for which this recursive sequence diverges, are not part of the Mandelbrot set. The set thus contains all c for which the sequence is bounded. The Mandelbrot fractal is the boundary of the Mandelbrot set.

It is usually impossible to see whether a given number diverges without calculating infinite steps. Thus, we rely on an approximation: if a number has not diverged after a maximum amount of iterations, we take it as part of the approximated Mandelbrot set. The larger the maximum iteration, the more accurate the approximation and the more details become visible.

It is worthwhile to note, that a number always diverges if in any of the steps |z| > 2.

The following figure shows the position of the Mandelbrot set relative to the real and imaginary axes in the complex plane.

Mandelbrot axes
The Mandelbrot set relativ to the axes of the complex plane. (image: wikipedia)

To get nice pictures of the set, we color each pixel according to the amount of iterations it took to make it diverge. We color pixels in black, if they do not diverge at all and thus lie in the approximated set.

Images

mandelbrot detail
Detail of the Mandelbrot set. This "small Mandelbrot set" is located along the negative real axis at Re(c) ≈ -1.75.

The first two images were rendered with my first C# software. Later, I added multithreading to make use of more than one CPU core. Due to the newly gained efficiency, I started using higher resolutions and iteration counts. The new software is based on double-precision floating point numbers and allows zooms up to about 1E-13. The following images were all created using the new software.

mandelbrot detail
Detail of the Mandelbrot set at Re(c)= -1.99999911758738, Im(c)= 0. Zoom: 5.9E-13.
mandelbrot detail
Detail of Mandelbrot set at Re(c)= 0.432539867562512, Im(c)= 0.226118675951765. Zoom: 7.3E-14.
mandelbrot detail
Another detail (I forgot to wirte position und zoom down for this one).

The following image has a resolution of 10000 by 10000 pixels. You can find the full image here.

mandelbrot detail
Detail at Re(c)= -0.0452407411, Im(c)= 0.9868162204352258. Zoom: 6.8E-10.

The following 207 megapixel image of the Mandelbrot set has a resolution of 19200 by 10800 pixels. You can find the full image here.

mandelbrot detail
207 megapixel image of the Mandelbrot set.