Inigo Quilez   ::     ::  

Intro


The main bulb of the the generalized Mandelbrot fc,k = zk + c not only is the most visible piece of the Mandelbrot set, but it's also an interesting object of study.

The Mandelbrot sets for k=2 and 3, with the main bulb highlighted



Some Curves


As for the classical Mandelbort set k=2, the boundary of the main hyperbolic component can be analytically found. The main hyperbolic component or period one hyperbolic component is the subset of Mk for which the orbit converges to a fixed point. This means, that for a sufficient large enough n

zn+1 = f(zn) = znk + c

or by removing the subscript for clarity

c = z - zk

Because we want the orbit to converge in practice (ie, that the fixed point is attractive), we need to pay attention to the derivative of the iterated function (respect to the iterated variable):

f'(z) = k⋅ zk-1

Actually, the fixed point theorem says that we need it's modulus to be less or equal to one

|f'(z)| ≤ 1

Intuition suggests that the derivative should be less than one in the inside, and equal to one in the boundary. In fact this was demonstrated by Douady and Hubbard, that made a more complete description on the hyperbolic components (showing for example that all are connected and isomorphic to a disk).

To track the boundary of the main hyperbolic component (also known as main cardioid in the M2 set), we fix the derivative to have unit length

f'(z) = e

so that



Replacing c=z-zk in the above, we get

The subscript "1" means that this is the curve in the parameter space (c) for the hyperbolic component of period 1.

From this result we see that the curve c(w) is not closed at least if the derivative travels in a circle between 0 and 2π. We know the curve must bound a connected set, so we conclude that the derivative must wrap k-1 times while the parameter loops only once into the complete boundary:



For example, for k=2 we get the well known result for the classical Mandelbrot set:



and for k=2 we get:



These are the graphical representation of some of the curves on the family in white, over the corresponding M set:



It's important to note that


and therefore



What means that the curves converge into the unit circle.



Internal bound


For speeding up rendering of the classical Mandelbrot set, a common optimization is to directly detect as internal points those belonging to the main cardioid and the period 2 bulb . These can be easily done checking if either



or



are negative. Some formulas has been also derived for the boundary of the period 3 hyperbolic components, but they involve complex hyperbolic trigonometric functions, are probably the area involved does not worth the cost of evaluating the function.

For the case of a polynomial of degree 3 or more, things become even worse, so another solution should be found if possible for speeding up rendering as much as possible.

From the description of the curves we can at least try to calculate the bigger circle that can inscribed in it. It's simple to check that the center of symmetry of the curve is 0 except for k=2. Hence we can use the minimum modulus of as upper bound for the optimization disc.


The function is bounded by -1 and +1, (what can be checked by showing that it's equivalent to cos(t(k-1)) for example), so we can safely bound the complete expression to

From here we get that



We will call this minimum radius of safety. Note how


We can now draw this safety circles together with the curves. Notice that the bigger k the better the disk does on saving rendering or pixel counting time.







External bound


The oldest algorithm ever used for rendering the classic Mandelbrot set is the escape method. Based on the fact that any orbit with a point outside the disk of radius max{|c|, 2} escapes to infinity with no "back" stepping anymore, points can be detected to belong to the set as long as the orbit never exceeds this distance from the origin.

The value 2 is not arbitrary, although most people don't know its origin. We will try to find the bailout for k other than max{|c|,2}, of the form .

Assume that |zn| is already bigger than |c|. Escape to infinity will occur then if



Removing the subscripts for clarity, and by using the anti-triangle inequality |a+b| ≥ | |a|-|b| | we get



Since we assumed |z| > |c|, we get



So, in general we have



Of course this generalizes to the case k=2. Note how the escape radius gets smaller as k increases. Actually,




Now that we have the escape radius, we can set an upper bound to the complete set. If |c| ≥ Qk then Bk = |c| is obviously a bounding radius: let's say we start iterating for a point of c: 0, c, ck+c, .... For the second iteration we have



So, the set is completely contained in the disc or radius Qk



Circles with radius Rk and Qk for k = 2, 4, 10 and 36



As a last observation, since we have proved that both Rk and Qk tend to 1 as n grows, which are the inner and outer bounding circles of the set, it is clear than in the limit the area of the fractal section reduces to zero and all that is left is a simple circle of radious 1.

This is a realtime rendered implementation of the formulas above (move the mouse over the image to reveal the UI, then press the play button). If you want to see the source code, click in the title bar in the viewer of follow this link: https://www.shadertoy.com/watch/MltXz2: