Beginners Guide to Writing Fractal formulas.
What is iteration anyways?
I figured I'd start with a broad description without the math speak.
The central concept behind computer generated fractal images is
"Iteration". Iteration is the repetitive application of an algorithm
to some defined end. As a simple example if you take a calculator
and enter a number and then press the square root key repetitively
will end up at the number 1 or close to it.
So what are the important things for this iteration thing?
1. Setting the initial conditions required for the iteration. Picking
the first number on your calc for instance.
2. Picking a function that will be iterated Use the sqrt,sin, cos
key on the calc
3. Telling the function when and how to stop
Save the number after 25 executions of the key stroke or stop when
the result is <= 8.5
4. Tell the compiler what global default values to use radian measure,
gradian measure, or degrees.
UF formulas are organized in the exact same way as above. UF uses
labels to separate these sections in your formula. The labels are
INIT, LOOP, BAILOUT, and DEFAULT.
So how do I write my own formula?
If we are now comfortable with the structure of things we can begin.
The first thing to worry about is what you are going to call it. Some
people use numbers some people use descriptors, and some people use names
of formulas already available. The key to a successful name is to try and
make the formula name unique to you. Do not pick "Mandelbrot" as the name of
your formula or "Shapes" but "MandelRSP01 is good. RSP001 is weak because
it offers no hint as to what's included inside. For this tutorial I've
selected "FTtutorial". The next thing to understand is that an ufm file
can contain many individual formulas so we need to separate them for the
compiler. This is done using "{ }" brackets. The first stage of writing
a formula looks like this.
FTtutorial{
}
At this point we can put in our labels, remember those INIT, LOOP,
BAILOUT, and DEFAULT.
FTtutorial{
INIT:
LOOP:
BAILOUT:
DEFAULT:
}
It's a good time to notice that every label must be followed by a colon
":". This tells the compiler what to do with the next section. If you
leave out the colons it doesn't work.
So what about comments and cryptic messages?
Comments are easy to add just insert a semicolon ";" and the compiler
will ignore everything after it. Lets add a comment to the tutorial
formula.
FTtutorial{
; If this tutorial goes any slower I'll have to go to the dentist.
INIT:
LOOP:
BAILOUT:
DEFAULT: ;It's a great habit to just comment
}
Just remember that after the ";" the compiler ignores everything.
So how do I pick a function to loop?
There are two ways to pick a function. Either you know the function
and want to explore its dynamic or you are a monkey at a keyboard and you
copy it from a math/calculus book. If you don't have one buy one at the flea
market for 25 cents and it'll serve you greatly. For this tutorial I
have copied this equation from some pre-calculus book.
AX^3+BX+C
So what do I do with that now?
First remember that Z is the looping (iterating) variable we are going
to play with so X becomes Z:
AX^3+BX+C becomes
AZ^3+BZ+C
And oh ya, the compiler does not understand implied operations ( ab is
the same as a times b, to the compiler ab is its own variable, more on
variables later) so
AZ^3+BZ+C becomes
A*Z^3+B*Z+C and for clarity becomes
A * Z^3 + B * Z + C and since we want z to be the value
of this function every loop lets assign this value to Z
Z = A * Z^3 + B * Z + C
Lets put this it into our formula in the loop section. It is
conventional to indent the lines under the section label 2 spaces.
Remember white space is there to help you the compiler ignores it. Oh
and by the way I am capitalizing for emphasis you don't have to, the
compiler doesn't know the difference.
FTtutorial{
; If this tutorial goes any slower I'll have to go to the dentist.
INIT:
LOOP:
Z = A * Z^3 + B * Z + C
BAILOUT:
DEFAULT: ;It's a great habit to just comment
}
Before the compiler can actually do anything we need to set initial
values for the variables in the equation. The variables are Z, A, B, C so
lets figure out what we need to do.
Z we want this to have the value of the current pixel on the screen
when we start and conveniently UF offers you a system variable called
PIXEL. Its important to know that all system variables start with a
pound sign # so the #PIXEL is the current starting screen pixel. The
only system variable that is not preceded by a # is Z. Just imagine how
many # you'd be typing.
A, B some constant that I would like to vary and change to explore
in the future. A little later we will make these selectable but for now
we will make them constants. It's important how you assign numbers. If you
say A=1 then it is an integer, if A=1.0 Then a floating real number, and
if A=(1.0,0.0) then a complex number. Integers are quickest, and then
floats, and then complex as far as the compiler is concerned. Lets make
ours integers since we are not going to change them yet.
C Another constant that I think should be constant assigned to the
#PIXEL variable (its called an arbitrary constant of integration). Later
on we will use this to apply a Julia switch to the formula.
Lets transfer these assignments to the formula's INIT section.
FTtutorial {
; If this tutorial goes any slower I'll have to go to the dentist.
; All right I made the appointment for the dentist
INIT:
Z = #PIXEL
A = 1
B = 1
C = #PIXEL
LOOP:
Z = A * Z^3 + B * Z + C
BAILOUT:
DEFAULT: ;It's a great habit to just comment
}
To recap we've picked the key on the calculator, and what number to
start with now we have to tell it when to stop. Think neighborhood now an
area. We want it to stop when the absolute value of Z (the distance from
the origin (0.0,0.0)to the point ) is less than &. we'll pick 4 because
if it's good enough for the Mandelbrot set it's at least a good starting
point for us. So we want | Z | <= 4 So let's put this into our bail out
section.
FTtutorial{
; If this tutorial goes any slower I'll have to go to the dentist.
; All right I made the appointment for the dentist
INIT:
Z = #PIXEL
A = 1
B = 1
C = #PIXEL
LOOP:
Z = A * Z^3 + B * Z + C
BAILOUT:
|Z| < 4
DEFAULT: ;It's a great habit to just comment
}
What about all the stuff in the DEFAULT section?
We haven't done anything that requires that section yet, be patient.
Well this is great, how do I get it into UF?
It's easy
Start UF
Click File-New-Formula
And a window called Formula1 comes up
You normally do all your work in this window. You can cut and past the
above formula into this window or type it in from the tutorial.
When you have done it click the little x in the corner and you will get
"save this file-yes" then a save-as dialogue box. Save it as FTtut and
hit
ok.
In UF click
File-New-Fractal
Search out the FTtut and select Fttutorial
And that is your first official Formula
Part 2 to come
In the futur we will be saving all our formulas into this this file so
don't delete to hastily.