VRML FractalsThe First VRML Fractal Site on the Web |

Home
| Machine Learning
| Crypto
| Graphicsimages | create | FAQ |

Are these really fractals?

How do these relate to Iterated Function Systems (IFS)?

What is the difference between real fractals and pseudofractals?

How can I create Javascript to make new fractals?

Another definition is a non-integer box-counting dimension. By that definition, everything here counts as a fractal, if you first replace every primitive shape, such as a sphere or cylinder, with a point.

Barnsley, in Fractals Everywhere, defines a fractal to be any set, and then says that intuitively some sets ought to be called fractals, and some shouldn't. But he gives no definition for distinguishing them.

I call all of these objects fractals, since they have infinite numbers of components, appear qualitatively the same at many different scales, and correspond to an intuitive notion of "fractalness".

An IFS is a type of fractal defined and analyzed by Barnsley. When a fractal here is made up only of other fractals, as with the mountain, then it is an IFS. If it also has ordinary objects added in, such as for the tree, then it is not an IFS. So the entire tree is not an IFS, but the set of leaves on the tree are.

A second approach is to have the object show only a few components at a distance, but then to automatically change and add more components as you get closer. VRML currently allows this with the LOD node. This can be slower in some cases, since the machine must constantly recalculate distances. But it can also be faster in some cases. For example, in a forest of fractal trees, only the nearest trees would be rendered in detail, and the distant trees would just be tiny green blobs. True fractals always generate smaller files than large pseudofractals, but the difference is small, and the pseudofractal might even take up less RAM while it's being rendered.

There is one major problem with true fractals, though. They are great for fractals like the tree, where the small trees are simply scaled-down versions of the large tree. But for fractals like the mountain, the components are squished in some directions, but actually grow in other directions. So a true-fractal mountain may not render well when you fly over it, even if it works well when you approach it from the side. This problem doesn't happen with the old LevelOfDetail command that used to be part of VRML. Unfortunately, when LOD was added, LevelOfDetail was removed, so there's no way to fix this.

One additional function in the code is very useful: VRMLtransform(). If you give it the (x,y,z) coordinates of 4 points in space, and the (x,y,z) coordinates that you want them to move to, then it will generate a single VRML Transform node that implements that affine transformation. It has lots of checks for special cases, and tries to make the output code as small as possible. This function was coathored by Leemon Baird III and L.C. Baird II. This was a nontrivial function to write in JavaScript, since it required singular value decomposition, matrix multiplication, solving sets of equations, and converting rotation matrices to the rotation-about-an-axis form used by VRML. All in a language that doesn't support matrices or complex numbers. If you find a way to make that routine simpler, please let me know!