The 4D Mandel/Juli/Buddhabrot Hologram
by Melinda Green


4D Buddhabrot Hologram Projected Onto {Z.r,Z.i} Plane
Red Limit
15
Green Limit
40
Blue Limit
100
 
The original Buddhabrot rendering technique maps out the behavior of the complex Z trajectories as they move about the image plane under the influence of the famous iterated function Z = Z2 + C. This page describes a natural extension to that technique into 4 dimensions. Unlike previous attempts to add new dimensions either by changing the function (especially the exponent), or by using quaternions instead of complex numbers, this new technique continues to use the unaltered function, changing only the way the object is rendered.

Rendering of Mandel/Julia set images typically begins by selecting a single initial complex point C from the image plane and then iterating Z from either 0 (Mandelbrot) or from a non-zero constant (Julia). The fundamental observation here is that the Mandelbrot/Julia set is 4-dimensional to begin with. I.E. for every combination of {Z-real, Z-imaginary, C-real, C-imaginary} (subsequently abbreviated Z.r, Z.i, C.r, C.i.), there exists a unique exit value. The natural way to visualize this data is as a 4D array of intensity values. A natural analogy is the 3D data produced by an MRI scan. MRI scans produce 3D arrays of tissue density values. 2D images are then produced from that 3D data either by rendering cross-sections or by projecting all the 3D data onto a given image plane. Mandelbrot images are simply cross-sections of the 4D data at Z = 0, and Julia Set images are simply cross-sections at different planes. The original Buddhabrot image can be visualized as projections of the trajectories of Z values sampled from the Z = 0 plane.

This page describes my recent realization that the buddhabrot technique need not be limited to rendering just the Z trajectories beginning from a particular plane but instead can be generated from the entire 4D data set projected onto an arbitrary plane. This process is exactly analogous to projecting an entire MRI data set onto an arbitrary plane rather than simply taking a single cross-section of that same data and ignoring the rest. This extension is called a "Hologram" because any part of such an image is potentially influenced by all parts of the 4D domain. The only modification to the buddhabrot rendering code is that the initialization for the generation of each trajectory changes from:

Complex C = Complex.random();
Complex Z = new Complex(0, 0);
while(Z.magnitude() < 2)
    ...
to now be:
Complex C = Complex.random();
Complex Z = Complex.random();
while(Z.magnitude() < 2)
    ...
That's it! Buddhabrot images are now produced from the entire 4D domain. The image at the top of this page shows the result of using this technique to project the full 4D trajectory map data onto the familiar Z = 0 plane. You'll note that it's almost identical to the original Buddhabrot images; the only visible differences being in the central region towards the very bottom. So if the resulting image is roughly the same, what's the big deal? Well, just like the difference between an X-ray and an MRI scan, we can now easily project this 4D object onto any 2D image plane!

It's natural to project onto the Z = 0 plane because all the action is in the Z values, but it's still very interesting to project onto different planes. The next most interesting projection planes are also the easiest to describe: i.e. those at right angles from the Z = 0 plane. A 3D box has faces parallel to the three major planes {X,Y}, {X,Z}, and {Y,Z}. In 4D there are six major planes. Using the complex number notation they are: {Z.r,Z.i} (shown above), {Z.r,C.r}, {Z.r,C.i}, {Z.i,C.r}, {Z.i,C.i}, {C.r,C.i}. To generate Buddhabrot renderings onto another plane, say the {Z.r,C.r} plane, only requires an even simple modification to the Z iteration loop which changes from:

while(z.magnitude() < 2) {
        Z = Z.squared().plus(C);
        incrimentPixel(Z.r, Z.i);
}
to now be:
while(z.magnitude() < 2) {
        Z = Z.squared().plus(C);
        incrimentPixel(Z.r, C.r);
}


Only a single character needs to be changed! The following pages show images projected onto the other five major planes.

Continue