This post is an update about a project I’ve been working on for twenty years. I recently did some work on it with Mathematica, and I’ve posted my latest version of my work both as a Mandelbulb 7 Mathematica notebook, and as a Mandelbulb 7 PDF File. I post these files not so much because I’m finished, but rather because I’m sick of working on it, and I’d like to share the gain and the pain. This post presents most of the material.
The Mandelbrot set M is defined in terms of a plane map mandelmap[z,c] which takes z into z*z + c. We add plane points by adding their Cartesian components—this is easy. Multiplying plane points (in particular computing z times z) is done by pretending the plane points represent complex numbers. A problem in defining a 3D Mandelbrot set is that there is no good 3D analogue of complex numbers, and therefore there’s no obvious best way to “square” a 3D point (x, y, z).
[Bozo the Mandelbrot set!]
Various other ideas have been tried for finding the platonic 3D bulb, such as using quaternions. The quaternion approach gives taffy-like structures lacking the warty smooth quality we seek. Daniel White discusses the quest and some of the approaches in his web page about his search for the Mandelbulb.
What do we want? A “Mandelbulb,” a root-like object that’ s like a big sphere with a dimple in the bottom and with bulbs on it, and further warts on the bulbs. I wrote about this object in my 1987 science-fiction short story “As Above, So Below,” which I’ve just placed online for reference. [Note that this story is not to be confused with my novel of the same name.]
The Cubic Connectedness Map
I’ll mention here as an aside a completely different approach to looking for a 3D Mandelbrot set. The idea is to take a 3D cross section of a 4D fractal called the Cubic Connectedness Map, which was first investigated by Adrian Douady, John Hubbard and John Milnor.
In a nutshell, if k is a complex number, we define Mk to be the set of complex numbers c such that both k and -k, when plugged in for z, lead to a finitely large sequence of iterates in the map z = z^3 – 3*k*z + c. The set of all Mk in k-c space forms the four-dimensional Cubic Connectedness map or CCM.
I created some software for finding 2D cross-sections of the Cubic Connectedness map in the Autodesk CHAOS program, see my remarks at http://www.cs.sjsu.edu/faculty/rucker/cubic_mandel.htm Note that you can download the Windows CHAOS program here as well.
I think I got the idea for the CCM fractal from the technical papers: Adrian Douady and John Hubbard, “On the Dynamics of Polynomial-like Mappings Bodil Branner and John Hubbard, The iteration of cubic polynomials Part I, and The iteration of cubic polynomials Part II: Patterns and parapatterns . Whew!
Another of the surprisingly few links on this rich topic is an article by the Swedish amateur mathematician Ingvar Kullberg, “The Cubic Tutorial,” concerning a plug-in that generates these images with the popular Ultra Fractal software.
Shown above is a detail of the Mk you get when k = -0.4055 -0.1135 i. The detail is the image is in the area centered on (0.12, 0.87) in the c plane. I call this guy “Fafnir” after the famous dragon.
By incrementing up and down through the k parameters, I had gotten the impression that by “stacking” some of these 2D slices while varying a single real-number parameter, such as the real part of k, we could get a nice 3D Mandelbulb, and I still can’t quite believe this isn’t true. But Paul Nylander recently rendered a run that looks discouraging.
I still have some slight hope that Paul’s rendering algorithm might be in some way not be quite what we want, or that, perhaps we need to do something other than simple stacking of 2D cross-sections in order to find the Mandelbulb within the CCM.
By the way, another great math-graphics hacker Billy Rood had a shot at this “stacking” algorithm, also without being able to find the Mandelbulb we’d hoped for.
A Spherical Coordinates Algorithm
A different way of thinking of complex number multiplication is to express (x,y) in polar coordinates (norm,theta). In these coordinates, multiplying two complex numbers means multiplying their norm-values and adding their thetas. This is readily generalized to traditional 3D spherical coordinates. A point can be represented by a triple (norm,theta,phi), where phi is the azimuth elevation above the xy plane, and theta is the polar theta of the point’s projection onto the xy plane. And then multiplying two of these numbers means multiplying their norm-values, adding their thetas, and adding their phis.
So squaring a complex number in the plane passes from (r, theta) to (r*r, 2 theta). And in spherical 3D coordinates, (r, theta, phi) becomes (r*r, 2 theta, 2 phi). This is an idea I spent a little time on in 1988, and recently I came back to it again. Details are in that Mathematica Mandelbulb Version 5 notebook of mine I mentioned at the start of this post. One encouraging thing about this approach is that we can be sure that the set we get will have a familiar Mandelbrot set as its intersections with both the xy plane and the xz plane…for in the xy plane, phi is identically zero; and in the zy plane, theta is identically zero.
Here’s a test run, done by crudely splitting space up into voxels and marking the spots that are inside the intended Mandelbulb.
In 2007, a similar approach was used by Daniel White, who posted about his search for a nice 3D Mandelbrot shape on his website mentioned above, and on the fractalforums site, a site where the elite meet to geek.
And White coined the world “Mandelbulb” for the image we seek.
As I mentioned, the gifted computerist Paul Nylander blogs about “hypercomplex fractals” at his Bugman site. Here he shows a rendered image of a White Mandelbulb that, as White already noted, doesn’t look like the smooth bulbous shape we’d dreamed of. It’s close, but it has the taffy/whipped-cream/spun-glass excrescences that we want to sand away.
One problem might be that there’ s an imparity in how we get the two angles, theta and phi, in the spherical coordinates, in that theta is an “argument” angle in the xy plane and phi is an azimuth elevation above the xy plane. They aren’t really the same types of angles. So maybe it’ s not surprising that simply doubling those angles doesn’t produce a smooth bulbous 3 d Mandelbulb. It would be nice if the angles were more similar in nature.
To make this happen, we might define both angles as azimuths like phi…or define both angles as arguments like theta, I have a little more about this in that Mathematica notebook I mentioned…but these approaches don’t seem to work.
Another problem could be that, when we double two angles we’re in some sense moving the point too violently. Perhaps you should be multiplying the angles not by two, but by some weighting factors mul1 and mul2 which might depend on whether, say the point is closer to the xy plane or to the xz plane.
Meanwhile…we’re still waiting for the Mandelbulb to touch down!
The Eighth Power
Dan White, Paul Nylander, and David Makin have been investigating a different approach. We go with the spherical coordinates version of the 3D Mandelbrot set, but instead of squaring the number in each iteration, we raise it to, say, the eighth power, that is, we raise the radial length the eighth power and multiply the theta and phi angles by eight.
[8th power 3D Mandelbrot, rendered by Paul Nylander]
Other powers give nice results too—at present it seems as if the crud only shows up in the squaring version. Or perhaps the views we have of the higher powers aren’t sufficiently detailed to show some lurking crud. But latest zooms are looking good.
[Close-up of the 8th power 3D Mandelbrot, rendered by Daniel White.]
White comments: “In this gold pic, see how the sine wave style curves of the 2D mandelbrot translate to ‘egg carton’ type shapes, and also how the background in the gold pic is ‘smoother/flatter’ than the foreground. Often, parts of the 2D mandelbrot do exactly the same when the iteration level is low enough (the end of stalks round off).”
I have some more material about these ideas in my later post, “Breaking the Bank of Computation.“