Smooth colouring with continuous escape time.
authorClaude Heiland-Allen <claude@mathr.co.uk>
Sat, 21 Dec 2013 14:07:35 +0000 (14:07 +0000)
committerClaude Heiland-Allen <claude@mathr.co.uk>
Sat, 21 Dec 2013 14:20:54 +0000 (14:20 +0000)
commitfb98ed31d9265937092682c1f04d0c34aecff54f
treeee23c13025cff06e82384ce3d990deeb4fb25e52
parentbbd262f1df0b02d41c829800db414930c3f94e54
Smooth colouring with continuous escape time.

The escape time bands around the Mandelbrot set increase stepwise by 1.
We now have the final iterate radius, which we can use to smooth the
colouring.  If the final radius is large, then the previous iterate was
close to escaping.  If the final radius is small, then the previous
iterate was further from escaping.  Here we assume the escape radius
is large enough for the approximation ignoring |c| to hold.  Squaring
gives a curve, which we can linearize using logarithms.  We have a value
in [0,1], but log 0 is undefined (it heads towards negative infinity),
moreover we still want to end up with a value in [0,1].  Adding 1 gives
a value in [1,2], and taking the base-2 logarithm gives the required
range, as log_B 1 = 0 and log_B B = 1 for all B.  We subtract this value
from the integer escape time, giving a fractional escape time with
continuity at the transitions between bands and smoothly increasing
size.

    $ for exp in $(seq -w 0 11)
      do
        ./render \
          0.3060959246356990742873 \
          0.0237427672737983365906 \
          2e-${exp} 512 ${exp} &&
        ./colour ${exp} > ${exp}.ppm
      done
    $
colour.c