This is part five of  the Beginners Guide to Writing Fractal formulas.
Please do one, two, three and four before doing this tutorial.

For this Tutorial lets add an assignable center to our traps so we can
move  the shape around the complex plane and add a selectable function 
( a selectable function you say hmmm.)

In preparation:
    Start UF
    Load FTtutorial4
    Click the edit to open the ufm in the editor
    Copy and paste a new instance of FTtutorial4
    Change the title of the new instance to FTtutorial5

So lets add a center to the elliptical trap first.

We know from the last tutorial that the equation for the elliptical trap
is
    X^2/M^2 + Y^2/N^2 <=1
Trust me on this one...The center of the above trap is (0,0)
From analytical geometry (high school algebra,conic sections) we have

(X-H)^2/M^2 + (Y-K)^2/N^2 = 1

This is the equation of an ellipse centered at (H,K) with one axis M units 
wide and another axis N units tall.  

Great, that makes me feel all warm and fuzzy what do I do with that.
First lets analyze the variables
    X   Our formula already takes care of it
    Y   Our formula already takes care of it
    H   A new one we have to figure out
    K   Another new one we have to figure out

We want to add a new parameter called Center

Param Center
  Caption = "Trap Center"
  Hint = "The center of the elliptical trap\
                And the Cirle trap"
  Default = (0.0,0.0)
Endparam

Whats that back slash "\" doing there is that a typo?
That backslash is how you tell the compilor that the Hint string or
any other string is continued on the next line.  Very useful for big long
winded hints or long enumerations.

A really neat thing is that the order you put your parameter definitions
in the formula default section is the order they will display in in the 
properties/formula tab dropdown.

Hopefully defining a new parameter is old hat and every one can do it.
Lets put this into our formula in the default section. ( You can do that
all on your own now)

We've defined the parameter Center how do we use it now?
We are going to take advantage of the real and imag functions in UF and 
define.
    H = real(@Center)
    K = imag(@Center)
We need to insert these into our loop section.  The loop section now looks 
like this:

LOOP:
  Z = A * Z^3 + B * Z + C
  X = real(Z)
  Y = imag(Z)
  M = @FTM
  N = @FTN
  H = real(@Center)
  K = imag(@Center)
IF @FTTEST == 0
    if |Z| < 4
      STOP =1
     else
       STOP =0
    endif
  Elseif @FTTEST == 1
    if X^2/M^2 + Y^2/N^2 <=1
      STOP =1
    else
      STOP =0
    Endif
Endif

Hey, why did you put the H and K assignments before the if else statement?
We did that because the compiler is sequential and we will need this info 
before the if statement so it will work properly.

We have one quick substitution to make.  We need to replace
            X^2/M^2 + Y^2/N^2
With
            (X-H)^2/M^2 + (Y-K)^2/N^2

Lets do that. The loop section now looks like:

LOOP:
  Z = A * Z^3 + B * Z + C
  X = real(Z)
  Y = imag(Z)
  M = @FTM
  N = @FTN
  H = real(@Center)
  K = imag(@Center)
IF @FTTEST == 0
    if |Z| < 4
      STOP =1
     else
       STOP =0
    endif
  Elseif @FTTEST == 1
    if (X-H)^2/M^2 + (Y-K)^2/N^2 <=1
      STOP =1
    else
      STOP =0
    Endif
Endif


And that is it we have added a selectable center to the elliptical trap.
The circle trap will be easier to do now since we have already defined
everything we need.  Lets look at the Circle trap closely.  Remember back
in chapter one when I said that:
        |Z| < 4 is basically the same as saying X^2 + y^2 < 4
We're going to take advantage of this and do the same substitution we did
to the elleptical trap.

Lets replace
            X^2 + Y^2 < 4
With
            (X-H)^2 + (Y-K)^2 < 4

Lets put that into our Formula's Loop section.  The Loop section now looks 
like this:

LOOP:
  Z = A * Z^3 + B * Z + C
  X = real(Z)
  Y = imag(Z)
  M = @FTM
  N = @FTN
  H = real(@Center)
  K = imag(@Center)
IF @FTTEST == 0
    if (X-H)^2 + (Y-K)^2 < 4
      STOP =1
     else
       STOP =0
    endif
  Elseif @FTTEST == 1
    if (X-H)^2/M^2 + (Y-K)^2/N^2 <=1
      STOP =1
    else
      STOP =0
    Endif
Endif

Lets save our work.
    Close he formula editor
    Formula tab then select FTTutorial5
and try out this new Center thing.

Next we are goung to add a selectable function in our formula.  This is
where you get a big bang for you buck.  These  function calls have a similar 
structure to the Parameter blocks.  It is:
            Func name
                Caption = "yada yada"
                Hint = "yoda yoda"
                Default = sqr()
            Endfunc

Pretty straight forward.  Lets take a look at our formula and figure out 
where to put a function.  The function being iterated is:
            Z = A * Z^3 + B * Z + C
Lets change it to 
            Z = A * Z^3 + B * Z + (some function of C)

Lets Define our new function
    Func FTFUNC
       Caption = "C Function"
       Hint = " This changes the value of \
                   C ,the pixel, and actually \
             Grabs the point from another\
              Projected plane"  ; I warned you wordy hints
        Default = Ident()
            Endfunc

A quick question: what's the IDENT thing?
This is one of the functions available to us.  Its called the identity 
function and returns the same value its fed.  This function does
absolutely nothing to the pixel.  This is why  i chose it to be the
default so that
the picture generated is the standard picture.  The other functions are
listed below.
Sin     asin        sinh        asinh
cos     acos        cosh        acosh
tan     atan        atan2       tanh        atanh
cotan   cotanh  

sqr     sqrt
log     exp
abs     cabs
conj    flip
ident   zero
recip       ceil        floor       trunc
round       real        imag        oldz

So lets add this function definition to our Default section.

Then we can change in our loop section:
            Z = A * Z^3 + B * Z + C
to 
            Z = A * Z^3 + B * Z + @FTFUNC(C)

Did you notice that to use a defined function we use the @ just like we
use the @ in front of our defined parameters.  So the Formula looks like
this now:

FTtutorial5{
; 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 = @FTA
  B = @FTB
  C = #PIXEL
  STOP = 0
LOOP:
  Z = A * Z^3 + B * Z + @FTFUNC(C)
  X = real(Z)
  Y = imag(Z)
  M = @FTM
  N = @FTN
  H = real(@Center)
  K = imag(@Center)
IF @FTTEST == 0
    if (X-H)^2 + (Y-K)^2 < 4
      STOP =1
     else
       STOP =0
    endif
  Elseif @FTTEST == 1
    if (X-H)^2/M^2 + (Y-K)^2/N^2 <=1
      STOP =1
    else
      STOP =0
    Endif
Endif
BAILOUT:
  STOP != 0
DEFAULT:    ;It's a great habit to just comment
PARAM FTA
      Default = (1.0,0.0)  ; this tells the UF compiler that it is a
complex 
number
      Caption ="Coeff A"
      Hint = "A in AZ^3+BZ+C"
    Endparam

PARAM FTB
      Default = (1.0,0.0)  ; this tells the UF compiler that it is a
complex 
number
      Caption ="Coeff B"
      Hint = "B in AZ^3+BZ+C"
    Endparam

Param FTM
  Default = 2.0
  Caption = "Ellipse Xaxis Width"
  Hint = "the xaxis length for the elliptical trap"
Endparam

Param FTN
  Default = 1.0
  Caption = "Ellipse Yaxis Width"
  Hint = "the yaxis length for the elliptical trap"
Endparam

Param FTTEST
  Caption = "Bailout Test"
  Enum = "Circle" "Ellipse"
  Default = 0
Endparam

Param Center
  Caption = "Trap Center"
  Hint = "Center of the Elliptical Trap\
          an the Circle Trap"
  Default = (0.0,0.0)
Endparam

Func FTFUNC
  Caption = "C Function"
  Hint = "This changes the value of \
          C the pixel, and actually \
                    Grabs the point from another \
            plane projected by this function"  ; I warned you wordy hints
  Default = Ident()
Endfunc

}

Lets save our work.
    Close the formula editor
    Reload the formula
See the new C function drop down
Try out this new Function thing and enjoy.

This brings chapter five to an end.  I guess the other tutorials are going 
well because i'm not being bombarded with flame mail.  Will the next
chapter be the Julia switch chapter....(Cheerleaders cheering RAH! RAH!
RAH! SIS!  BOOM! BAH!)...Maybe a few more formula tweaks and additions.
then the julia switch.