Escape time colouring.
authorClaude Heiland-Allen <claude@mathr.co.uk>
Fri, 20 Dec 2013 21:45:58 +0000 (21:45 +0000)
committerClaude Heiland-Allen <claude@mathr.co.uk>
Fri, 20 Dec 2013 21:45:58 +0000 (21:45 +0000)
commitc1667b27527c2eeb3f3fa12ead01b6276f63d627
tree3199c8b7e5fe00d0b4700f4a0eee71ae807f2a79
parent66567c93430e53142108cdde4b6551ebebd8c1cb
Escape time colouring.

So far we've been colouring in a binary fashion: points possibly maybe
inside the Mandelbrot set are black, and points definitely outside are
white.  We're also breaking out of the loop early as soon as we know
a point has escaped.  We can add the information about ``how many
iterations it took before we knew the point escaped'' to our images
instead of throwing it away.  This technique is called ``escape time
colouring''.

First we need a variable to hold the final iteration count.  We initialize
it to zero, because this is really an impossible value: z_0 is always 0,
and 0 is always less than 2.  We correct our loop counter initialization:
within our loop we perform the iteration step before we check whether the
iterate escaped, so the n we need at that point starts from 1.  If the
point escaped we store the final n before breaking out of the loop.
After the loop finishes, we can output the final n directly.

Now the images look even more interesting: the isolated speckles with
copies of the whole seem to be connected to the main body by intricate
branches and spirals:

    $ ./mandelbrot -0.75    0       1.25     > mandelbrot.pgm
    $ ./mandelbrot -1.76    0       0.05     > mandelbrot.pgm
    $ ./mandelbrot -1.765   0.023   0.01     > mandelbrot.pgm
    $ ./mandelbrot -1.76648 0.04173 0.0005   > mandelbrot.pgm
    $ ./mandelbrot -0.8031  0.1780  0.1      > mandelbrot.pgm
    $ ./mandelbrot -0.8031  0.1780  0.01     > mandelbrot.pgm
    $ ./mandelbrot -0.8031  0.1780  0.001    > mandelbrot.pgm
    $ ./mandelbrot -0.8031  0.1780  0.0001   > mandelbrot.pgm
    $ ./mandelbrot -0.8031  0.1780  0.00001  > mandelbrot.pgm
    $ ./mandelbrot -0.8031  0.1780  0.000001 > mandelbrot.pgm
mandelbrot.c