3D Julia Blobs: An Idea

Since the Julia Set depends on the function fc(z) = z2 + c, where z and c are complex numbers, it’s therefore four-dimensional, and we can thus create 3D shapes from the Julia Set by taking hyperplanes of the form u∙Re(z)+v∙Im(z)+w∙Re(c)+x∙Im(c)=y where they intersect the hypercuboid (-2,-1,-2,-1) – (2,1,2,1). (Or is it the hypercube (-2,-2,-2,-2) – (2,2,2,2)? I don’t remember my reasoning behind those 1’s.) Our 4D viewing angle should obviously be perpendicular to the hyperplane so that the image doesn’t appear stretched. I’ve only experimented with hyperplanes where u = v = 0, or in other words, stacks of normal Julia fractals where c traverses some line through the complex plane. Other such hyperplanes might not work so well, since I think that fractals along w = x = 0 might just be rough circles. 

We could have controls for manipulating the hyperplane’s rotations on all six 4D axes and manipulating the 3D viewing of the hyperplane on all three 3D axes. We could show the results on a computer monitor using a voxel/point-cloud rendering library. We could also turn these 3D shapes into physical objects by using solid freeform fabrication of some sort, such as 3D printers. Some shapes may contain disconnected discrete parts. In those cases we can (a) connect parts together using thin metal or clear rods; (b) fabricate the inverse of a shape using a clear material within its bounding polyhedron; (c) fabricate the polyhedron in two colors, clear for outside of the Julia Set and some opaque or semitransparent color for inside of it; or (d) use a laser-etched crystal/glass block, or ideally, not a block but the shape of the intersection of the hyperplane through the bounding hypercuboid. For a more artistic look we can smooth out the shape by using a small number of iterations. 

If we don’t need closed shapes, then we can explore/fabricate the 3-d boundaries of Julia Set hyperplanes at arbitrary scales. We can also do this with closed shapes in the limited ranges where our hyperplane only intersects the very edge of the Julia Set.

I’ve actually tried to make programs to do this a number of times, but I failed because I couldn’t figure out how to use any of the available voxel rendering libraries.

Here are the libraries I’ve found: GVDB Voxels, GigaVoxels, Volpak, Visualization Toolkit, and Point Cloud Library. I think there might have been another one that I couldn’t install that I may have forgotten the name of.

Since I can’t do this, I hope somebody else does.

Update: Since the writing of the above, I found a way to create a 3D volume and render it. ParaView is a volume rendering application that allows you to load .raw files, which are simple enough for me to write. I rendered a 1000x1000x1000-voxel hyperplane of the Julia set, and the result was ugly/inelegant and uninteresting. I think I tried slicing it in more than one direction, and both/all the results were similar. Unfortunately, I didn’t take a screenshot of the result, and I just now tried installing ParaView again and loading the file in it, and I got an error. I have no idea what I did wrong. The program I made to write the .raw file can be found here: https://github.com/inhahe/julia/blob/master/paraview%20raw%20experiment/Source.cpp. (The way it works is very inefficient because I’m not a mathematician and also I’m lazy.)

But I did also find someone else’s 3D rendering of the Julia set (I’m not sure exactly how they extracted 3 dimensions out of the 4), and the result is a lot cooler. I can sort of verify the result because I once wrote a program that writes a mathematical expression recursing the Julia set formula to the Nth iteration (I forget what the value of N was), then reduced the expression to its simplest possible form using WolframAlpha, then loaded it in POV-Ray to view it, and I got an interesting, very feminine-looking shape sort of resembling the 3D rendering in question but with much less detail. (I don’t have an image of that either, and I remember POV-Ray being very finicky at rendering the expression so I won’t try to make it again.) Here’s the 3D rendering I found:

Leave a Reply