ChaosPro Home
Introduction
What's New
Palettes
Using Formulas
Layering in ChaosPro
Rendering
Fractal Parameter Windows
Windows
Menu
3D Transformations
Animations
Formula Compiler
Compatibility
Fractal Type Reference
Attractor
Theory
Overview
Parameter Tab
View Tab
Light Tab
Formula Tab
Coloring Tab
Bifurcation - Theory
Dynamic System
Escapetime
IFS
LSystem
Lyapunov Space - Theory
Plasma
Quaternions
Tutorials
Appendix
CHAOSPRO 4.0
Release 4.0
.

Theory

Fractal type "Attractor" originally has been implemented in order to render fractals of type "Strange Attractor": Attractors are fractal objects which evolve after some time while iterating some formulas. Strange Attractors are attractors which are fractals, i.e. attractors which have a fractal dimension.

In ChaosPro this fractal type is the result from continuously iterating some kind of function(s) which accept a point in 3D and return a (new) point in 3D, i.e. znew = f(z) with z  element of  R3 After each iteration the resulting point (a single pixel) is drawn on the screen.

In ChaosPro the function iterates a 3D pixel, although basically the general form of a "Strange Attractor" is not limited to 3D...but it seemed reasonable to do it in 3D, rather than staying in 2D (boring!) or allowing 4D or higher dimensions which would result in a more complex GUI and a slower fractal calculation.

So with fractal type "Attractor" a formula is iterated and after each iteration a 3D point can be drawn. Some examples of "Attractor" fractals are:

  • IFS fractals
IFS fractal image: butterfly IFS fractal image: menger sponge
  • Flame fractals
  • Dynamic Systems like Lorenz, Rossler, Henon, etc.
 
  • "Standard" solid objects:
  • And many more...
   

As you can see, completely different objects can be drawn.

ChaosPro defines an attractor A as:

 n 
A = UFi(z)  ,  with z R3  and Fi(z) = Fi,1(Fi,2(...(Fi,m(z))))
 i=1 

Each Fi(z) additonally has a "weight" Wi assigned which defines how often it will be chosen.

In ChaosPro you select the Fi,j(z) from the list of available formulas.

For example, a standard IFS fractal consists of Fi,1(z) = Mi*z+vi with Mi R3 x R3 and vi R3

You can use this fractal type to not only create fractal objects as you can see above: If a suitable formula is selected (or written by you), you can generate almost any 3D object using this fractal type: For example, in order to "draw a sphere" you need to write a formula which simply generates a random point anywhere on the sphere whenever called. Then tell ChaosPro to use that formula. Now after each iteration a new point on the sphere gets generated, and after some millions of iterations (iterations are fast, so it's easy to generate millions of pixels within a few seconds) you will see a sphere.


The algorithm of fractal type "Attractor" is as follows:
  1. Start with an arbitrary initial value (a 3D point, vector)
  2. Randomly select an Fi(z), taking account the weights assigned to the functions.
  3. Apply formula 1: z1 = Fi,1(z)
  4. Apply formula 2: z2 = Fi,2(z1)
  5. ...
  6. Apply formula m: zm = Fi,m(zm-1)
  7. Set z = zm
  8. Apply post transform formula(s) Fi,m+1 upto Fi,p subsequently to zm, result is zp
  9. Apply coloring formula to zp
  10. Draw pixel zp
  11. Maximum number of iterations reached? If yes, stop, otherwise go back to step 2

Step 2 - randomly selecting a function - comes from IFS fractals: There we have e.g. 3 transformations, for example with probability 0.3, 0.6 and 0.1. In order to draw such an IFS, the algorithm has to randomly choose one of the three transformations according to their probabilities. In ChaosPro you specify the probability by just specifying a "weight". If a function set Fi has weight 3 and another function set Fj has weight 1, then ChaosPro will select Fi three times as often as Fj.

Step 3 - 6: ChaosPro allows you to "combine" different formulas Fi,j(z) to a "formula set" Fi(z) . That's nothing else than just a series of formulas which are applied in sequence. Just imagine you have simple formulas, a displacement formula and a rotation formula: Just tell ChaosPro to first apply the rotation formula, then apply the displacement formula. The result is a rotation/displacement formula. ChaosPro allows you to do it that way so you don't need to write a formula which does displacement and rotation, but keep two different formulas which you can just apply in any sequence you like.

So there is nothing special with "formula sets", it just means you can build up a series of formulas.

A simple example: Have a look at the following two images:

The first one just uses the formula which generates a sphere, i.e. the formula generates a random point on a sphere in each iteration.

But there is another formula which performs a random displacement to each point (perlin noise). We just tell ChaosPro to apply the "random displacement" formula after the sphere generation formula has been called, so these two formulas form a "formula set". What happens is that the sphere gets distorted.

Such "simple" formulas then can be combined in any way you like: There is no direct need to have huge, complex formulas with thousands of parameters: Keep things simple, let the user combine different formulas. The displacement formula can be applied to all other formulas, whether they are generating spheres or cubes or fractals, spirals or whatever.

Step 8 - the post transformations, are a special feature: When assigning the different Fi,j(z) to a fractal you can specify a function as a "post transform" function instead of a "normal" function: This means, that the iterating point z does not get modified in any way by such a function. Instead, the transformation result is just used in order to transform the pixel which should be drawn.

What is the goal of such fancy stuff? Well, suppose you have a nice looking 3D Attractor which is the result of iterating its functions millions of times. If you change anything which has influence on z, then the whole shape completely changes. But for any reason you want the object to be twice as wide! What to do? Post transforms! Just assign the scale function with xScale=2 to each Fi as a post transform, then the iterating point z won't change, but each point which is drawn is applied the post transform and thus is scaled by 2. The overall shape won't change, but the attractor is twice as wide as before.