Avariant (in ea.ufm)
Avariant is provided in both the M(andebrot) and the J(ulia) version. All options described here can be applied to the M- and the J-version
but it's always wise to start in the M-version and then to switch to the J-version from the selected point in the M-plane.
The formulas, as given here, are not mathematically new. Indeed two of the features used in each of the ufm’s are not original. The basic
principles are:
1. Every iteration combines two different mathematical formulas. We can see this elsewhere in UF, e.g. in some files in jam2.ufm. The
Japanese fractal software ‘Flight from Fractals’ and ‘Raimuraito’, also have two formulas working together.
2. A procedure to reduce the amount of inevitable spirals in Mandelbrot- and especially in Juliafractals, as described by Albert Smooks*).
This has consequences: instead of spirals we get curves of rupture – one or more axes of symmetry with similar images on both sides. The
curved nature of these axes may obscure the symmetries but you will often get surprising results.
The two formulas we use in every iteration are indicated as A and B in the layer properties. They each have four modules:
a. The Mandelbrot/Julia formula and related polynoms. This and the next two modules have four sub variants with respectively 1, 2, 3 and 4
z terms. These sub variants are accessed by checking the ‘Non-standard’ box where a choice is made within the Polynoms section. Additional
to the number of z terms there is always a term with c in it. Thus a 3 z term selection will give 3 z terms + 1 c term. The c term is
shown as a function (above the Polynoms heading), but functions are selectable for any of the z terms though the default is always ‘ident.”
b. The formula of the French mathematician Samuel Lattes as explored by Benoit Mandelbrot and published by him in 1980. Mandelbrot was able to
simplify the formula into the form known today by his name (the Mandelbrot formula**). I have used the Lattes formula in a somewhat more
general shape.
c. The Talis formula, taken from ‘Fractal Explorer’. This too has been given a more general shape***.
d. the fourth module (Combi z&c) is also based on a polynom. Selection of this module makes three terms available as a unit as shown in the
drop down section ‘z&c.” These are respectively: 1, z only; 2, z & c combined; 3, c only.
N.B. Explanations of ‘c’ and ‘z’ may be found by studying the fractals literature in Wikipedia or elsewhere on the Internet. You also can find
details in the UF help file under ‘type setting’.
When combining formulas A and B different modules can be used within each. You are also able to vary the way they interact with each other by
changing the ‘decider’ (the decider is found within the General section). Formula B is disabled when the decider = 0, in this case only
formula A is active..
If decider = 1, at each iteration the formulas calculate in series, provided ‘parallel’ is not enabled; with formula A being followed by
formula B.
Formulas A and B can be set to work in series or in parallel. When parallel is unchecked and the decider = 1, at each iteration formula A
calculates to be followed by formula B. The formulas work in series, but there are several options.
One such scheme for the iteration in series is:
z1 --> by A --> z2 --> by B --> z3,
Here z3 is the initial value for the next iteration. When ‘series options’ are at ‘normal’, then z2 only is an intermediate station. If it is
at ‘var 1’ then the initial value for the next iteration is the real part of z2, combined with the imaginary part of z3. However at ‘var 2’,
the real part of z1 is combined with the imaginary part of end value z3.
When parallel is enabled the ‘series options’ is renamed as ‘parallel options’ and the drop-down box makes additional choices available.
The scheme is as follows:
z1 --> by A --> z2, and z1 ––> by B --> z3.
The actions of both formulas are in fact parallel and mutually independent. The result of both are z2 and z3 and both have to be combined in
one or another way to give a value z as a starting point for the next iteration. For this joining there are many possibilities. We give here
11 possibilities: ‘sum’, ‘product’, ‘difference 1 en 2’, ’quotient 1 en 2’, arithmetic, geometric and harmonic mean, together with the two
options previously available when ‘in series’. Of course not all these possibilities provide usable images in all cases.
It’s also possible to adjust the ‘decider’ at other values than 0 or 1. For instance at decider = 3, then iterations #1 and #2 are only
carried out by formula A. At iteration #3 both A and B are carried out, but iterations #4 and #5 use formula A, then #6 with both, and so on.
So when the 'decider' is not zero the rule is:
If the number of the current iteration, divided by the decider as specified is an integer, then both formulas A and B are executed. If this
quotient is not an integer, then only formula A is executed, and in this current iteration formula B is ignored.
As stated previously ‘decider’ is found under the ‘General’ heading, where you will also find the ‘bail-out’ value and the different adjustable
bail-out types.
Modules ‘Mandelbrot’, ‘Lattes’, and ‘Talis’ are default in their most simple ‘normal ’shape, we only can change the power of z (not for
Lattes), and at Talis we also can adjust the Talis constant.
When ‘non-standard’ is chosen for any of the first three modules, the Smooks option also becomes available. However, module 4 is inherently
non-standard, so here the choice of Smooks options is always present.
Smooks operations.
A short survey of Smook’s method may be of assistance and particularly to those with some familiarity with the mathematical terms used in the
construction of fractals. It only uses functions already available in UF, particularly abs(). During every iteration the position of z is
controlled by the parameters set. In the simplest case z remains in the first quadrant of the complex plane (the north east part of the image)
when both the real part and the imaginary part are positive. When the orbit of z comes outside the NE part, the function abs() will act and
place z back in the NE part. In that case z will be reflected in relation to the real or/and imaginary axis, so the natural building up of
the spiral(?) will be disturbed. In this basic example the NE quadrant is passive and the others active. Of course it’s also possible to
divide the complex plane in other ways. In Avariant this idea has been worked out in the following six modes.
First a remark on the complex plane of our image. The centre point is 0/0, the half line to the east at 0 degrees, to the north at 90 degrees,
to the west at 180 degrees, to the south at 270 degrees. The maximum angle of 360 degrees coincides with 0 degrees on the half-line to the
east. (In math, the positive direction is anti clockwise.)
A brief description of the six modes follows, but it isn’t necessary to know the how they function to produce effective results. The modes can
be applied intuitively.
If modus ‘none’, then no Smooks operations will take place. Only partial scaling is possible as we'll describe later on.
Modus ‘original smooks’, the basic situation according to Smook.
Modus ‘3 segments’. First we have to adjust an angle alpha between 90 degrees and 360 degrees (default 360 degrees). This angle divides
the originally active area (NW, SW, and SE) into two zones, the first one from 90 degrees to alpha. The second from alpha to 360 degrees.
We distinguish the NO quadrant segment I, segment II the zone from 90 degrees to alpha, and segment III from alpha to 360 degrees. There are
two submodi: ‘disabled’: segments I and III passive, and II active. The second one, 'enabled': I and II are passive and III active.
Modus ‘4 segments’. Two angles have to be adjusted: angle alpha > 90 degrees and smaller than beta. So this second one, beta must be higher
than alpha and its maximum is 360 degrees. Default: alpha 90 degrees, beta 270 degrees. To simplify the adjustment with the ‘fractal
explorer tool’, both angles are combined into one complex number, gamma. Angle alpha is the real part of gamma, beta is the imaginary part.
Segment I again is the NO quadrant, segment II the zone between 90 degrees and alpha, segment III between alpha and beta, and segment IV from
beta to 360 degrees. Here too, there are two sub modes: 'disabled': segments I and III passive, II and IV active. In sub mode 'enabled' segments
I, II and IV are passive and segment III active.
In mode ‘S to N ’, all values of the orbit in the southern hemisphere are reflected to the north; in mode ‘W to E refl.’, the same with orbit
values in the west, they are reflected to the east.
After every iteration, when a Smooks operation takes place it will be finished by the ‘flipper question’. Parameter ‘flipper’ can be adjusted
at ‘none’, ‘only north west’, and ‘all’. At ‘north east’, for all points of the orbit in this quadrant the real and imaginary components will
be changed. If ‘flipper’ = ‘all’, the same occurs for every point of the orbit. Flipping, the change of the real and imaginary component of
z, means a reflection to the angle of 45 degrees to the real axis.
These modes greatly enhance the original suggestion of Smooks, although he had already indicated that more variations are possible. In
Avariant there also is another way to apply his idea: Smooks uses the function abs() for the total value of the orbit point z, but it is also
possible to apply it only on a part of z. In module a (Mandelbrot polynoms) and d (blended polynoms) z consists of a number of terms which
can be split up and combined in several ways. So when we have a function
z = a1(z) + a2(z) + a3(z) + c,
then it can be split up in a part u and v, for instance u = a1(z) + a2(z) en v = a3(z) + c. We use u to carry out the Smooks operations but
we don’t do that on part v. Afterwards we combine both u and v into one complex value z as a starting point for the next iteration. For both
other modules the practice can be similar. Lattes has a fraction and Talis has two terms, one of them a fraction. It’s possible to apply
Smooks on the total fraction, or only on the numerator or denominator separately.
The last variations are indicated in Avariant as ‘allocation’. When it is ‘all’, then we use the whole z value. The other options, ‘part 1’,
‘part 2’, etc. only work on the split part u. The remaining part, v, isn't changed.
Even when no Smooks operations are applied it is useful to have the facility to split z into u and v. In that case of course it’s not
necessary to have the Smooks option enabled. When we choose under ‘allocation’ another option than ‘all’, then a parameter ‘partial scale’
appears. This is a (complex) scaling factor that only works on the allocated part u, and not on part v of the total z.
The effect of Smooks operations is at first sight somewhat disappointing. The beautiful Mandelbrot set for instance is seriously deformed,
just as Picasso in certain periods distorted the human form. At least half of the coastline changes from a beautiful Norwegian fjord coast
into a dull, plain, sand beach. At other places we see amounts of pixels smeared out as unusable smudge, and possibly only some devotees of
‘modern art’ can use them. Other parts look as landscapes, seen from a plane, with strange perspectives. Using built in UF-functions as
‘stretch’ and ‘skew’, it will be possible to use them. But at some spots of the new coast line we’ll see elaborate structures with curved
axes of symmetry, mentioned earlier. Spirals are absent or rarely present there. It’s easy to find these useful areas. They provide a
wonderful basis for creating fractal art, using Ultra Fractal ucl-files and gradients.
In all cases it’s possible to work in the normal way to find Julia fractals, using the Mandelbrot set as a map. It’s a remarkable thing that
even the dullest parts of the 'deteriorated’ Mandelbrot set often will give useful Julia’s.
A final word
In Avariant we have 4 modules and with this limited amount innumerable variations will be possible. Nevertheless it’s easy to add other
modules with new mathematical formulas. It isn’t sensible to make them too complicated for the calculation times would become too long and
unduly extend screen rendering times as parameters are changed – including those caused by changing ucl’s and gradients.
Other effects are possible: for instance it is possible to change the scale of formula A in relation to B by ‘overall scale A’. Such a
parameter is lacking for formula B, as it isn’t necessary there.
Also we didn’t mention details of the individual modules, most of them are obvious and it will be easy for you to make effective use of the
options available..
*) http://orbittrap.blogspot.com/2007_08_01_archive.html (Aug. 4, 2007)
**) B. Mandelbrot describes this interesting story in The Beauty of Fractals’ of H-.O. Peitgen and P.H. Richter (1986) p.151-160.
***) Also in the Talis formula more variations are possible. They have been extensively worked out by Tony Marshall in his ‘Talis and Friends’
(tma2.ufm). Maybe it's possible to implement some of these variations in a later update of Avariant.
Acknowledgement
Thanks to Cliff Tolputt for his kind positive critical remarks and his corrections on my broken English.
==============================================================================================================================================
Barnsley DeLuxe and BarnsleyTechno (in ea.ufm)
1. Intro
2. Short history
3, Principle
4. Input c's
5. Decision
6. Hi and Lo branch
7. Bailout
8. M-version
9. The original Barnsley types I, II, and III
10. Note
11. Examples
12. Acknowledgements
1. Intro
In Barnsley DeLuxe some of my own ideas are combined with those of other authors. Nevertheless I know that also other Barnsley variations
can be found in the individual ufm's of the UF database. DeLuxe only gives de Julia version of Barnsley's decision formula, BarnsleyTechno
is a subset of DeLuxe, so it has less possibilities than DeLuxe, but in Techno we see both sides of the coin: Julia and Mandelbrot.
The code has been written in 'old style' code, no facilities of UF5 are used, that's why the title is Barnsley DeLuxe UF4. It works in all
versions, UF 3, 4 and 5.
2. Short history.
Michael F. Barnsley describes in his book "Fractals Everywhere" (1988/1993) the "IFS" concept. It involves more than 90% of the text, but he
also mentioned another fractal system: 'decision' escape fractals. Tim Wegner and Bert Tyler apply the latter type in their FractInt software
in "BarnsleyM" and "BarnsleyJ", type I, II, and III (1991), followed by a.o. Frederik Slijkerman (Formulas\Compatibility\Fractint.ufm), and
others.
In Ultra Fractal there is a number of formula authors using this FractInt Barnsley concept: Klaus-Peter Kubik, Dan Kuzmenka, Eric Reckase,
Gilles Nadeau, Michèle Dessureault, Mark Townsend, Olivier Steiger, Ron Barnett, Toby Marshall, and others. Among them also Samuel Monnier
in sam.ufm, wih his "IFS-Barnsley" formula (which is in essence no IFS). Jock Cooper enhanced this formula in: "IFS-Barnsley+jockIII", in
jock.ufm. BarnsleyDeLuxe (ea.ufm) is based on the work of Monnier and Cooper. The bailout options are from Michèle Dessureault's
"md-barnsley-imj" (mde.ufm), and some extra options are taken from Olivier Steiger's Barnsley ufm's. It's not my intention to replace Jock's
ufm, nor other ufm's, but only to introduce a number of new possibilities, some based on work of other authors.
3. Principle of a Decision (Escape) Fractal.
We all know that during an iteration process, in every cycle, z is changing. At every iteration from z a specific real number r is calculated
and then compared with a choosen parameter, the "critical value". If r is higher than that parameter, then the next iteration is follows
the "Hi" branch, if not then it goes "Lo".
In Barnsley's original concept the differences between the Hi and the Lo branch were only slight ones . Later on Monnier and Cooper added
new options, different in both branches. We now have two formulas in these branches, each with distinguished Julia constants. In the
"normal" Mandelbrot/Julia concept we have only one iteration formula, with one Julia constant c (in a J this c is constant, in a M, c depends
on the pixel value). Also in the decision formulas of Barnsley's Julias there only was one c value.
In the original work of Barnsley, Wegner and Tyler, the critical value always is zero, Monnier introduced the adjustable real parameter
"critical value".
Of course there are different possibilities to derive a real number out of a complex one, most obvious is to take the real or the imaginary
value of z, but there are many more choises possible.
4. Input of the Julia constants c.
In a "normal" M/J fractal, using only one formula there also is only one complex c. The same was in the original Barnsley decision formula
and it could easily been adjusted, using the Explorer Tool (in UF4 or UF5). In our case, with two complex c-values it's somewhat more
complicated. In Barnsley DeLuxe there are 4 options:
4.1. Directly
Both for the Hi and the Lo branch the c values are choosen independently: real(c1), imag(c1), real(c2), and imag(c2).
4.2. Via Functions
It's the way both Monnier and Cooper did apply. Only one fictive pseudo c: "b-seed" is choosen. From this b-seed, c1 and c2 are
calculated via functions. When we use the same function for Hi and Lo, then c1 = c2, but when we use different functions,then c1 is not
the same as c2.
4.3. Techno (default)
This is a very specific case in which imag(c1) = 0 and real(c2) = 0. so only two components remain: real(c1) and imag(c2), which are
provided via the complex "t-seed". In this option the horizontal and vertical lines and structures in the fractal are emphasized.
4.4. Original
This is the way used by Barnsley, Wegner and Tyler: c1 = c2, the "original (Barnsley) seed".
5. Decision
The decision between Hi and Lo after every interation depends of:
5.1. The adjustment of the critical value.
In cases we get a black plane, it often is sufficient to change this parameter. Anyhow, the graphical result always depends strongly of
this parameter.
5.2. The way of calculating the real number r from z.
In principle there are infinite ways to do so, in Barnsley DeLuxe there are (arbitrarily) 37 modes available, among them 12 alternating
modes. In the latter ones, during sucessive iterations, every time two different calculations are made. In the Monnier/Cooper formulas
there only is one alternating mode.
5.3. Function mode
To enhance the number of options, the possibility has been added to apply not only r as such, but also as a function of r. In the case
of alternating modes (see 5.2.) there also is an extra option: the Alternate Function Mode.
5.4. Mode scaling
A scaling with one or more factors in a particular mode formula.
6. Hi and the Lo branch.
In both branches the same options are available:
6.1. Math formula
6.1.1. main - Based on the orginal Barnsley I and II formula
6.1.2. jocks - A variation of Jock Cooper
6.1.3. deviant - Variation in which c acts as a vector
6.1.4. type III - FractInt Barnsley type III
6.1.5. alt - A Barnsley variation as e.g. in alt.ufm, c acting as a power
6.2. Steiger variant
Dr. Steiger introduced some modifications of the original Barnsley formula: 'parabolic', 'gaussian', and 'sine'. They can be applied
in all cases of (6.1.) Default is 'none', then all Steiger variants are disabled.
6.3. Primary Function
The function used in the iteration formula.
6.4. Primary Parameter
A parameter, used in the iteration formula
6.5. Flight
If Flight is enabled then c is no longer a constant. At every iteration it will be shifted over a constant value, and that of course
does influence the calculated z. The amount of the c-shift to be adjusted by the Flight Parameter.
(The flight option doesn't work when mode = type II).
6.6. Operator
The operator manipulates z in every cycle. Four options: 'none', '+' (plus), '*' (multiply), and '^' (power). Subtraction can be
applied by adding (+) a negative number. By activating 'invert' the options 'multiply' and 'power' are changed into 'divide' and
'root'. Default: 'none'. When another operator option is activated a new option appears:
6.7. Skip cycles
Number of first cycles for which the operator action will be skipped. Default: 0, no skipping; 1 = only the first cycle skipped, etc.
It's about the same as Olivier Steiger's "glueing". He describes it as "glueing makes the loop algorithm skip [the operator action of]
the first iteration, because for many .ucl the first step is of special importance. This may remove also some 'splitting edges' (of
the ucl.s)".
Note:
When you don't want an operator action, but you'll still use the possibility of a secondary function (6.8.), with, or without 'glueing',
you can for instance activate 'Operator' by the option '+' (6.6), and use for the secondary parameter (6.8.) the complex value = (0/0).
6.8. Secondary Function
The result of the iteration can be modified by an arithmetic operation (6.6.), a glueing option (6.7.), and afterwards a second function
can be taken, the secundary one.
6.9. Secundary parameter
Works together with the operator in (6.6).
6.10. Power
Although in most cases this power will be 1/0, the possibility is offered to change this parameter.
7. Bailout
Most Barnsley software routines have only one bailout option: mod = square modulus (|z|), but some have more (Dessureault, Kubik, Kuzmenka,
Steiger). In Barnsley DeLuxe mainly the procedure given by Michèle Dessureault has been followed.
Three parameters:
7.1. Bailout Test (16 options, default: 'mod')
7.2. Bailout Function (The same as the "Goofy functions" of Steiger) (8 options, default: 'ident')
7.3. Bailout Value as usual, (default: 1000)
8. Mandelbrot version
In Barnsley DeLuxe are four, in stead of the more usual two components of c, so it's not possible to apply a switch for this Julia version
into one Mandelbrot, there's more than one M's possible. Most BarnsleyM pictures are not very interesting from an artistic point of view,
and further, the switch isn't really necessary. You can find out the most interesting values of c, using the Explorer Tool of UF4/UF5. In
fact the Explorer Tool window of a c is a M-plane, but an empty one and that's a pity, we don't see the M-structures in this plane, so finding
optimal values of c's is less easy than with the usual switch tool.
In the subset BarnsleyTechnoJ, there only is one (pseudo) c, so here a M version could be written: BarnsleyTechnoM. It's a confirmation of
my statement before, the M pictures are in my opinion unfit for "fractal art", but very useful as a map of Julia's, for searching interesting
possibilities.
9. Original Barnsley types I, II, and III
Barnsley DeLuxe has been written with Jock Cooper's "mechanical gallery" in mind (http://www.fractal-recursions.com/). But it's also possible
to make traditional Barnsley pictures as given in FractInt. The data for the three main types:
----------------------------------------------------------------------
Data for the original 3 Barnsley types from FractInt (Tim Wegner c.s.)
----------------------------------------------------------------------
type I type II type III
maxiter 149 149 149
General mode real type II real
function mode ident ident ident
scale parameter 1 1/1 1
critical value 0 0 0
input original original original
recommended start seed 0.6/1.1 0.6/1.1 0.1/0.36 *)
bailout test mod mod mod
bailout function ident ident ident
bailout value 4 4 4
Hi formula main main type III
Steiger variant none none none
types III variant --- --- c inactive
primary function ident ident ident
primary vector -1/0 -1/0 -1/0
operator none none none
skip cycles 0 0 0
sec. function ident ident ident
power 1/0 1/0 2/0
Lo formula main main type III
Steiger variant none none none
types III variant -- -- real
primary function ident ident ident
primary vector 1/0 1/0 -1/0
operator none none none
skip cycles 0 0 0
sec. function ident ident ident
power 1/0 1/0 2/0
----------------------------------------------------------------------
*) The image is exact the same as Slijkerman's Barnsley 3 (Julia) in Fractint/ufm. The image in T.Wegner c.s., "Fractals For Windows" (1992)
is different, more in the neighborhood of a start seed = (0.4/0.0).
10. Note
Maybe a superfluous remark but nevertheless a useful one. To explore the action of each option you can make a two identical layers, including
identity in gradient and the position of it. Then in Layer Properties, choose for the upper one 'difference', and for the bottom one 'normal',
giving a black window. By changing a parameter or option in one of both layers you can easily detect the effect. Change always only one
parameter or option, not more than one. When Exploring the effects it is often useful or even necessary to use another ucl than the 'normal'
Smooth(Mandelbrot), e.g. one of the Orbit Traps options in standard.ucl.
Of course this remark is a general one, not only useful for this Barnsley DeLuxe formula.
11. Examples
12. Acknowledgements
My thanks for using the results of my predecessors: Samuel Monnier and Jock Cooper (for the general concept), Michèle Dessureault (bailout
options), Dr. Olivier Steiger (goofy function, glueing options and Steiger formula variants) and all others, including Janet Parke and Kerry
Mitchell for their wise lessons. At last, not to forget, thanks to the intiator of the whole 'decision' concept, Prof. Dr. Michael F. Barnsley.
==============================================================================================================================================
Lucky, a Ducky special
I. Lucky as such
Lucky doesn't use new formulas, it uses existing codes, with some small
variations in the way the iterations are carried out. They often give
interesting symmetrical patterns. Although there are many self-similarities,
I don't think all these results are fractals in a math sense, some are,
others not or are doubtful.
First of all some definition. When I speak of a 'formula', I mean a maths
formula, without conditional requirements. If conditions are present,
I speak of a 'script' or 'code'. So UF consists of mapping, fractal and
coloring scripts. The math formula only has standard functions and parameters.
Lucky is a subset of Ducky (the latter has been baptized in such way by
Elias Rain). The well known mushroom/parachute pattern of Ducky is not its
main characteristic. The real one is the interrupted orbit. Every time
the argument of the points of an orbit exceeds the limit of 90 degrees
(p/2 radians) it will be put back by the abs function. In graphics it
means that it will be mirrored in relation to the vertical axis (where
Im(z) = 0), so that it will be thrown back into the first quadrant. Thus
it becomes clear that the 'natural' spiral structure will be disturbed and
that the resulting shape of orbit points soon will be very difficult.
The specialty of a Lucky is that some iterations will follow a different
pathway. We restrict ourselves to two possible pathways, each with
different parameters or even with different basic functions.
The Lucky script has been split into two parts: a first and a second code.
In the default mode ('series'), 'first-second separated' unselected,
every iteration will follow either path 1 or path 2, depending on parameters
'main condition'.
The following examples (with the option 'variant' off) may clarify how
it works:
If 'main condition' = 'below', and primairy choice 'lo' = 10, iterations
1 to 9 will follow code I, and iterations 10 to #maxiter code II,
If 'main condition' = 'equal', and primairy choice 'lo' = 10, iteration
10 will follow code I, all others code II,
If 'main condition' = 'between', and primairy choice 'lo' = 10, 'hi' = 15,
iteration 11, 12, 13 and 14 will follow code I, all others code II,
If 'main condition' = 'above or equal', and choice 'lo' = 10, iteration
1 to 10 (including 10) follow code I, 11 and higher code II,
If 'main condition' = 'not equal', and choice 'lo' = 10, iteration 10
will follow code II, all other iterations code I, and at last,
Finally if 'main condition' = 'outside', and choice 'lo' = 10, 'hi' = 15,
then iteration 10, 11, 12, 13, 14 and 15 will follow code II, all
other iterations follow code I.
In the case where 'first-second separated' is selected the coupling
between code I and code II has been broken and both codes have their own
'main code', 'lo' and 'hi' parameters.
Note: The sequence of both codes differ because the successive options
are complementary :
For code I:
Below 'lo'
Equal to 'lo'
Higher than 'lo' and lower than 'hi'
Higher than 'lo' or equal to 'lo'
Unequal to 'lo'
Below 'lo' or higher than 'hi'
For code II each case is complementary to the corresponding one of code I:
Higher than 'lo' or equal to 'lo'
Unequal to 'lo'
Below 'lo' , equal to 'lo', equal to 'hi' or higher than 'hi'
Below 'lo'
Equal to 'lo'
Higher than or equal to 'lo' and lower than or equal to 'hi'.
In all cases there is an extra variation possibility, with 'variant' selected.
We illustrate the difference between both options of 'variant' with an
example. It uses an intern variable: 'counter'.
Parameters: 'mode' = series, 'lo' = 5, maxiter = 32, 'variant' switched off:
iter# 1, 2, 3, 4, code I
counter 1, 2, 3, 4,
iter# 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, code II
counter 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
iter# 16, 17, 18, 19, 20, 21, 22, 23, code II
counter 16, 17, 18, 19, 20, 21, 22, 23
iter# 24, 25, 26, 27, 28, 29, 30, 31, code II
counter 24, 25, 26, 27, 28, 29, 30, 31
iter# 32 stop iteration
counter 32
When button 'variant' is switched on, a new parameter appears: 'end'.
Now. with the same parameters, and parameter 'end' = 12:
iter# 1, 2, 3, 4, code I
counter 1, 2, 3, 4,
iter# 5, 6, 7, 8, 9, 10, 11, code II
counter 5, 6, 7, 8, 9, 10, 11,
iter# 12, 13, 14, 15, 16, code I
counter 12 -> 0 1, 2, 3, 4
iter# 17, 18, 19, 20, 21, 22, 23, code II
counter 5, 6, 7, 8, 9, 10, 11
iter# 24, 25, 26, 27, 28, code I
counter 12 -> 0, 1, 2, 3, 4
iter# 29, 30, 31, code II
counter 5, 6, 7
iter# 32 stop iteration
counter 32
With 'first-second separated' on, both main conditions and also 'lo' and
'hi' are separately adjusted, so it is a possibility that there will be
some dummy iterations. In this instance the "calculated" z is the same
as the z at the start of this particular iteration. In these cases only
the 'inside' or 'outside' code will be executed, changing the value of z.
Modes
So far the default mode, 'series'. There are three other modes:
'only code I', 'only code II', and both codes parallel. In fact both
modes 'only code I' and 'only code II' are identical, but due to the
organization of the script, both modes can provide different results.
The last mode is different. Codes I and II are calculated separately
and after each iteration both values are combined. For the possibilities
of combining both branches, see the paragraph at the end of this chapter:
'Mixing of parallel calculated branches'.
Formulas
Only two Ducky formulas have been applied, the original Ducky Lite
(ea.ufm) and some Talis formulas. A survey of the options:
1. asinh
2. log
3. Talis options:
3.1. original Talis
3.2. var.1
3.3. var.2
3.4.var.3
3.5.Duckytalis
4. general function
5. mix: asinh & function
6. mix: log & function
7. mix: Talis (and variations) & function
8. mix of 2 functions
9. function of a function
10. sum of 2 functions
11. product of 2 functions
12. ratio of 2 functions
13. 28 ways of combining 2 functions
Option 3.1-3.4 are the Talis formulas from Fractal Explorer
Option 3.5 is Danny van den Berghe's one from vdb.ufm
Option 9 – 12 are suggested by Kerry Mitchell in his formula writing course.
In the four mixing formulas 5 – 8, the influence of both components can be
controlled by parameter '% mixing'.
Option 13 are different means and other variations, the same as mentioned in
'Mixing of parallel calculated branches' and under 'precoloring'.
Ducky Lite (option 4) (with 1 function) and its relatives (options 1 and 2)
have no further parameters. Duckytalis has 4 parameters: Duckytalis function,
variation function, Duckytalis power, and the variation factor.
Lucky procedure
During every iteration that satisfies the main condition, two steps have to
be carried out. Preparation to offer z to the fractal formula z ---> z', and
calculation of the fractal formula, including when desired, the addition of
a vector, z' ---> z ''
ad 1) z ---> z'
This first step is an essential for the Ducky procedure. There are no
parameters. The only purpose is to start from the first quadrant. Each
starting z will be brought into the first quadrant by function abs: z = abs(z).
ad 2) z' ---> z ''
Calculation of the fractal formula have already been described under 'Formulas'.
There are two options:
1. 'alternative' off (unticked)
If the particular iteration satisfies the condition the fractal calculation
takes place When 'vector?' is selected, a vector #1 may be applied;
if the condition is nor satisfied, with 'vector?' selected, another vector#2
may be applied. After all operations, the Julia vector is added.
2. 'alternative' on (ticked)
In all cases (if the particular iteration satisfies the condition or not),
the fractal calculation takes place, inclusive the addition of the Julia vector.
Then, if the iteration satisfies the condition, with 'vector?' selected,
vector#1 may be added. When it doesn't satisfy the condition, with 'vector?'
selected, vector#2 may be added.
After the fractal calculation, when the result is outside quadrant 1, it has
to be brought again into it. With 'alternate' on it will take place after adding
the Julia vector, default when 'alternate' unselected, it is before adding the
Julia factor. There are two possibilities, default with button 'rotate back' off,
mirroring by the function abs, with 'rotate back' on, it turns z over 90 degrees
clockwise.
Mixing of parallel calculated branches
Combining the results in the case of mode 'Parallel'. Here are two steps:
the preparation and the combination itself.
In the case of mixing the more or less equivalent branches A and B, the
preparation is less important. But as the same mixing function is used for
'prec#oloring' (see below), where both precolorings may be different, we
will discuss it here. With 'Preparation' selectedon, it will be enabled.
We see then a button 'Modification of one branch?', 2 parameters: 'Branch
Scaling', 'Imag Scaling', and another button: 'Branch Vector?'
With selection 'Modification' off, only branch A will be treated. With
selection mode 'Modification' on, only branch B. This treatment is a
scaling of z, and a scaling of only the imaginary part of z of that
particular branch. When selection mode 'branch vector?' is enabled,
z of the particular branch will be subtracted from the number 1/0 (just
one), but also we see a parameter 'const. '1'', default on Re = 1, Im = 0.
This complex parameter can be changed. An example to clarify. For ease we
do this with 'normal' numbers, not with complex ones. Suppose we have a z
nearer to one than to zero, but we need the calculated results of z to be
more in the neighborhood of 0 than in that of 1. In this case the cosinus
function does not satisfy our wish, but the sinus function does, e.g.
sin(0.1) = 0,0998, cos(0,1) = 0,9950. We see, the cosinus function gives
values in the region of one (with one as its maximum). When we subtract
cos(0,1) from a constant value one we get 1 – cos(0,1) = 0,0050, a number
near to zero, so now it satisfies our wish. That's what 'const.'1' does.
To enhance the possibilities, this parameter can be given other values by
changing this parameter.
For the combination of both branches there are 28 options. The first, 'spicy',
one of both branches is the main one. But a small adjustable amount of the
other branch may be added. The other 27 options can be divided into 'means'
and other ways of combination. There are 17 'means' available. Not all are
apllicable in all circumstances. For the meaning of these averages, see the
descriptions in Wikipedia. The remaining 8 options are other than averages,
the influence of each branch can be varied, not only from 0 to 100%, but also
below zero or above 100%. In the case of a linear mix this means that one
branch will be subtracted from the other.
Some general remarks.
As been said before, Lucky is a special form of Ducky, both are in most cases
non-escaping formulas. So the 'bail out' criterium must be high enough to get
the 'whole' picture. Mostly (but not always) the inside coloring is the more
important than that in the outside region.
Being non-escaping, the end of the iteration process is determined by the maxiter.
The choice of a good maxiter is very important because of its influence on the
end result. There is no optimal maxiter, different values will provide different
results. When the adjusted maxiter is too high the result will be no fractal or
fractal-like, but a plain gray plane.
In many cases very low values of a maxiter give better results than high values
(e.g. with function 'log').
The same is true for parameters 'lo', 'hi' and 'end'. Don't start with too
high values, often 'lo' = 2 is often already interesting.
Originally the Lucky concept is in the mode 'series', with buttons 'variant',
'alternative', 'first-second separated', and 'vectors?' off. We advise to use
this default set as a starting point.
II. Precoloring as an 'after treatment'
The UF procedure has generally three steps:
Mapping (optional)
Construction of the fractal as such
Inner and/or outer coloring.
Here a fourth step has been added between 'construction' and 'coloring': the
'precoloring'. It's a kind of color transformation of the pixel which may
influence the end result strongly. The idea is not new, it comes from 'Fractal
Explorer'. Those who practice this software know it as '(additional) Transform'.
The possibilities given in 'Fractal Explorer' are somewhat adapted and enhanced.
We don't use the word 'Transfer' to avoid confusion with 'Mapping' or 'Transformation'
in UF. In fact the 'precoloring', with its relatively large script, can be applied
after almost every fractal script (or before almost every coloring). Maybe a task
for other formula writers who are more acquainted with OOP.
Besides 'no precoloring', there are 21 options, all using goniometric formulas.
Some have 'joker' options, in a mathematical sense nonsense options, but in
practice they sometimes can give interesting graphical results.
If precoloring is applied it can be carried out in a single way or a second
precoloring is possible. In case of two precolorings there are two options: series
('precoloring in series' selected) and parallel (unselected). In the parallel
mode there are the same possibilities to combine as we saw earlier for codes, and
again there are the same 28 ways of combination (see description earlier given
in 'Mixing of parallel calculated branches').
With thanks to:
Kerry Mitchell, Elias Rain, Jennifer Stewart, Danny van den Berghe (for his fiat
to use his Duckytalis formula), Beesknees67 (Kim), Maureen Ward, (for correcting this
text and some worthful suggestion to improve the parameter lay-out), Thea Verkerk,
Titia van Beugen, and 'FarDareisMai' (Jess). They all helped me in one or another
way to work out the concept of Ducky and its derivative: Lucky.
Bleiswijk, sept.3rd 2013
==============================================================================================================================================
Olapol mapping
There's a new version of mapping 'Olapol' on the UF Formula Database (ea.uxf). When using old upr's, which made use of the original version 1.00, you'll don't have problems. These upr's will work automatically with this new version.
In this version 1.01 there are 2 options:
1. Olapol, the same as the original version 1.00
2. Apollo modified, it's almost the same as IFS-Apollo in reb.ucl, only some parameters have been added, including a complex parameter 'center', which originally was a constant 0/0.
The other added parameters, which are enabled in both options are:
float parameters #1 and #2 and complex parameter #3. In the original IFS-Apolllo they are constants.
The integer parameter '# pseudo-iterations' got its name because the loop section in 'Olapol' doesn't give real iterations. In the Olapol option the loops are addtions. When the indicated number of pseudo-iteration has been reached, it is divided by this number, so we get the arithmetic mean value. It will be clear that by increasing the number we come closer and closer to a fixed mean value. So lower values of additions are more interesting. With this option it is also possible to change the probability of the 3 formulas, by adjusting parameters threshold and ceiling. Default, the probabilty is 1/3 for each formula.
In the Apollo option the number of pseudo-iterations are comparable with a fruit machine. A very simple one, with only 3 possibilities, corresponding with the 3 formulas in the loop. For instance, #1000 gives the same image as #4, In fact, with the given seed of 123456789, as we did here, the 3 different images are already reached after 5 pseudo-iterations, #1, 2 and 3 are identical, #4 and #5 provide the other two.
The background of the Apollo system is unknown, but in the original script there are two remarkable constants: 0.5 and 0.5v3, the sides of a rectangular triangle with hypotenusa = 1 and angle 60º (1/3 rad.). When button 'geometric mode' is enabled this angle can be varied, while the hypotenusa of the virtual rectangular triangle remains 1. So both former constants are now automatically adjusted in a coupled way. This 'geometric mode' is a new feature in the new Olapol version. It works both for the Olapol and Apollo option.
In a nutshell:
First we see a question: "Addition or Single?". These options both use some basic mapping formulas.
'Addition' is the same as 'Olapol' vs.1.01.
At every addition one of 3 available formulas is selected in a random manner.
It makes little sense to increase the number (in "# of additions) to high values.
Relatively low values already give interesting images.
The randomness can be adjusted by changing the parameter 'seed'. (Default it is 123456789.)
'Threshold' and 'Ceiling' are default on 1/3 and 2/3.
So the probability of the selection of a formula from the three available formulas for each subsequent addition = 1/3.
By varying these parameters, you can change the probability distribution.
'Single' is the option for choosing only one formula.
Here there are two possibilities: one way, the default setting, and "the other way".
In the default setting we can select with parameter 'Key' from five available formulas.
#0, #2 and #4 show distorted pictures as we already know from vs.1.00, and also from IFS Apollo (reb.uxl).
#1 and #3 are new, they provide much stronger distorted images.
'The other way' gives two formulas: A and B.
Both consist of two components, controlled by the complex parameter 'Balance'.
In the second part, "Other parameters" are two possible paths: 'Geometric mode enabled or disabled'.
Default this parameter is disabled. We then see two parameters, 1 and 2, affecting the shape of the image.
If the 'Geometric' is enabled, we see only one parameter: 'angle'. It is a vertex of a fictitious right triangle. Also this angle has a large influence on the shape of the image.
Finally we see a number of general complex parameters which also have influence on the image. They always work, regardless of the position of the modes adjusted:
- Parameter #3
- Center (which is related to the origin)
- Scale. This is not a scaling factor that acts as a 'zoom'. Even with this parameter 'scale' the image can be distorted.
Notes.
1. The same kind of mapping can be found as 'Pallas' in ea.uxf, a further development of 'Olapol' with more direct control on all parameters,
2. Olapol and Pallas are especially useful for Ducky and related fractal formulas,
With thanks to Ron Barnett who gave kind permission to modify his original Apollo mapping.