
Barnsley IFS Fractals

formulas: ifs


One of the most remarkable spin-offs of fractal geometry is the ability to
"encode" realistic images in very small sets of numbers -- parameters for
a set of functions that map a region of two-dimensional space onto itself.
In principle (and increasingly in practice), a scene of any level of
complexity and detail can be stored as a handful of numbers, achieving
amazing "compression" ratios... how about an image of a forest, more than
300,000 pixels at eight bits apiece, from a 1-KB "seed" file?

Again, Michael Barnsley and his co-workers at the Georgia Institute of
Technology are to be thanked for pushing the development of these iterated
function systems (IFS).

Xmfract will prompt for an IFS file name, then scan it for IFS definitions,
then prompt you for the IFS name you wish to run. Fern and 3dfern are good
ones to start with.

Note that some Barnsley IFS values generate images quite a bit smaller
than the initial (default) screen. Just bring up the zoom box, center it
on the small image, and hit <d> to get a full-screen image.

To change the number of dots xmfract generates for an IFS image before
stopping, you can change the "maximum iterations" parameter on the <x>
options screen.

Xmfract supports two types of IFS images: 2D and 3D. In order to fully
appreciate 3D IFS images, since your monitor is presumably 2D, we have
added rotation, translation, and perspective capabilities. These share
values with the same variables used in xmfract's other 3D facilities; for
their meaning see "Rectangular Coordinate Transformation".

You can enter these values from the command line using:

rotation=xrot/yrot/zrot       (try 30/30/30)
shift=xshift/yshift           (shifts BEFORE applying perspective!)
perspective=viewerposition    (try 200)

Alternatively, entering <i> from main screen will allow you to modify
these values. The defaults are the same as for regular 3D, and are not
always optimum for 3D IFS. With the 3dfern IFS type, try rotation=30/30/30.
Note that applying shift when using perspective changes the picture --
your "point of view" is moved.

A truly wild variation of 3D may be seen by entering "2" for the stereo
mode (see "Stereo 3D Viewing"), putting on red/blue "funny glasses", and
watching the fern develop with full depth perception right there before
your eyes!

This feature USED to be dedicated to Bruce Goren, as a bribe to get him to
send us MORE knockout stereo slides of 3D ferns, now that we have made it
so easy! Bruce, what have you done for us *LATELY* ?? (Just kidding, really!)

Each line in an IFS definition (look at fractint.ifs with your editor for
examples) contains the parameters for one of the generating functions,
e.g. in fern:

   a    b     c    d    e    f    p
 ___________________________________
   0     0    0  .16    0    0   .01
 .85   .04 -.04  .85    0  1.6   .85
 .2   -.26  .23  .22    0  1.6   .07
-.15   .28  .26  .24    0  .44   .07

The values on each line define a matrix, vector, and probability:

    matrix   vector  prob
    |a b|     |e|     p
    |c d|     |f|

The "p" values are the probabilities assigned to each function (how often
it is used), which add up to one. xmfract supports up to 32 functions,
although usually three or four are enough.

3D IFS definitions are a bit different. The name is followed by (3D) in
the definition file, and each line of the definition contains 13 numbers:
a b c d e f g h i j k l p, defining:

    matrix   vector  prob\
    |a b c|   |j|     p\
    |d e f|   |k|\
    |g h i|   |l|\

The DOS program FDESIGN can be used to design IFS fractals.

