in Mandelbrot fractals
C is the point which should be
evaluated. For 2D fractals we would use complex numbers and set
Creal = x
and
Cimag = y, for 3D fractals we are using
Quaternions and set
Cx = x,
Cy = y,
Cz = z, and
Ct = t where
I denote the 4 components
of a Quaternion
C by
Cx,
Cy,
Cz,
and
Ct and
t is a fixed value - we just
don't
have a 4
th component in 3D space.
Z is set to the origin point
(0, 0,
0, 0).
in Julia fractals
Z is
used to
represent the coordinate which should be evaluated (
Zx = x,
Zy = y,
Zz = z, and
Zt = t) and
C is set to a value
C0
which could be choosen differently but is fixed for one fractal.
If
C0
is taken from the Mandelbrot set then we will get an non-empty
Julia
set (I will explain how to decide for a given coordinate to be in
the
set of the fractal next). Especially interesting fractals emerging
for
values of
C0 coming from the border areas
of the
corresponding Mandelbrot fractal (an especially boring fractal
could be
created by choosing
C0 = (0,0,0,0) which just
creates a
sphere).
The series
Z = Z * Z + C shows
two
different
outcomes
for
different
numbers
(which
is
used
to decide
wether the corresponding coordinate belongs to the fractal or
not):
- The distance of Z
to the
origin (0,0,0,0) could grow infinitely. If this is the case
the
coordinate (represented by the C
in Mandelbrot fractals, by the initial Z
in Julia fractals) do not belong to the Mandelbrot / Julia set
(looesely speaking: it does not belong to the fractal)
- Z converges or it
oscillates. Then the coordinate belongs to the fractal set.
Of course it is infeasible to evaluate the series
Z = Z * Z + C for an infinite
number
of steps. Instead we evaluate it for a given max. number of steps
called
max-iter. If
after
max-iter steps the
distance
Z to the origin
point (0,0,0,0) has
not grown over the value given by another parameter called
bail-out, then the associated
coordinate is assumed to be part of the fractal, otherwise we
break the
iteration as soon as the distance has grown over
max-iter. The "correct" value
for
the
bail-out parameter
is 2
because one could show that whenever the distance grows over 2 it
will
grow further up to infinity, i.e. such a value could not belong to
the
fractal. Nevertheless a bail-out < 2 could make sense to speed
up
the calculation. Furthermore if we manipulate the calculation (we
will
see next how to do that) the "correct" bail-out value could be
different (in general it is unkown).
Since version V3.0 I am using distance estimation (DE) for all
types of
fractals. For every point, which does not belong to the fractal, a
distance to the next "solid" point could be estimated. Although we
do
not know in which direction that point is located, we know that we
could move at least this distance (in any direction) before we
have to
check again. This technic is called "ray marching". DE also makes
it
possible to smooth the surface by counting points whithin a given
distance around the fractal also as solid points. Doing so, the
bail-out parameter is not
used
anymore because the Z-value for a point within a given
distance could well move out of the range defined by
bail-out.
In order to get some iteresting results it is possible to do some
changes to the normal calculation scheme:
- Change the series, e.g. evaluate the series C(Z*Z)
instead of Z = Z * Z + C
- Use wrong operators e.g. for taking the sum and/or the
product of
two Quaternions, e.g. instead of the correct
multiplication
formula for Quaternions A
and B:
A * B = (Ax*Bx
- Ay*By - Az*Bz
- At*Bt,
Ax*By + Ay*Bx
+ Az*Bt
- At*Bz,
Ax*Bz + Az*Bx
+ At*By
- Ay*Bt,
Ax*Bt + At*Bx
+ Ay*Bz
- Az*By)
we could use something like this:
A * B = ((Ax*Bx
-
Ay*By)4 - Az*Bz
-
At*Bt,
Ax*By + (Ay*Bx
+
Az*Bt)4 - At*Bz,
Ax*Bz + Az*Bx
+
(At*By - Ay*Bt)4,
(Ax*Bt - Az*By)4 +
At*Bx
+
Ay*Bz)
The fractal generator supports all these types of manipulations
(where
the operators and series formulas could be taken from perdefined
lists
only)
This section does not explain the parameters in more
detail. For
more
information about 3D-Fractals please have a look the chacpter "
Just a Brief Introduction" or at
<http://user.cs.tu-berlin.de/~rammelt/fractal/>
(in german).