by Melinda Green

Previous Plane | Inside the M-Set | Next Plane |

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 = Z

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 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:

to now be:Complex C = Complex.random();

Complex Z = new Complex(0, 0);

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 ontoComplex C = Complex.random();

Complex Z = Complex.random();

while(Z.magnitude() < 2)

...

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:

to now be:while(z.magnitude() < 2) {

Z = Z.squared().plus(C);

incrimentPixel(Z.r, Z.i);

}

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. Just click the "Next Plane" link above to move
through the planes.

Note the "Inside the M-Set"
link which shows you what happens if we track points inside the M-Set instead of
outside. The feeling these images give is a somber eairy feeling and
not so much like hindo spirtual art
that outside points generate.

Since we are making images
projected down from 4-space, we can also project from arbirtary angles.
This allows us to make 3D stereo images
and even rotation
animations. Here are the animations I've produced so far:

- ZrZi to ZrCr
- ZrZi to ZiCi
- ZiZi to ZiCr
- ZiCi to ZiCr
- ZrZi to CrCi - 4D
rotation & projection that turns the figure inside-out

- ZrZi to ZrCr -
only points Inside the m-set.