Fractals/Iterations in the complex plane/Mandelbrot set/lavaurs
Topological models of Mandelbrot set
 Thurston model ( abstract Mandelbrot set )^{[1]}
 Lavaurs algorithm ^{[2]}
 Abstract Mandelbrot tree ^{[3]}
 Cactus model ^{[4]}( go to the image, where the src code and description of algorithm is )
 Fake Mandelbrot Set = Mset without hairs, filaments and primitive hyberbolic components^{[5]}
Lavaurs Algorithm edit
This algorithm shows :
 how to compute angles of external rays landing of root points of Mandelbrot set
 how to draw diagram ( lamination on a circle) showing structure of Mandelbrot set
External angles (measured in turns modulo 1) landing on root points of period p components of Mandelbrot set are:
Arc (chord) consists of:
 two external angles landing on the same root point
 root point.
Names edit
 Quadratic Minor Lamination = QML.
 It is the collection of Minor Leaves of any quadratic invariant lamination. The minor leaf is the image of the longest leaf in the lamination.^{[6]} An approximation of the Quadratic Minor Lamination contains only periodic minor leaves.
 The quadratic minor lamination QML contains minor tags of dendritic quadratic polynomials.
 lamination on the circle associated with Mandelbrot set
 abstract Mandelbrot set ( Thurston)
 pinching disk model of Mandelbrot set : after pinching ( glue) all points of circle, which are connected by arcs. It is space homeomorphic to Mandelbrot set^{[7]}
Mathematical description edit
 draw unit circle
 connect angles of period two : 1/3 and 2/3 with arc in unit circle perpendicular to the boundary
 for next period connect 2 angles of the same period (first and second) with arc, such that :
 no arc crosses any other ( previous) arc,
 first angle is the smallest angles not yet connected, and second angle is the next smallest angle not yet connected^{[8]}^{[9]}

period 2

period 3

period 4

period 5
Programmer's description edit
 draw main circle with center (x0, y0) and radius r0 in the middle of your image
 choose period, for example p=3
 compute pairs of angles ( in turns)
 for each pair (alpha,beta) draw an arc using part of new circle, which is orthogonal^{[10]}^{[11]} to main circle in 2 points : c1,c2
Computing pair of angles edit
(to do )
Drawing arcs connecting angles edit
Converting units of angles edit
First units are in turns ( list of pairs of angles )
Using ttr function:
(defun ttr (turn)
" Turns to Radians"
(* turn (* 2 pi) ))
convert them to radians:
(alpha (ttr ( first anglelist)))
Computing points of intersection edit
Main circle (x0,y0,r0) and new orthogonal circle ( x,y,r) have 2 common points :
 c1 = (a,b) = (x0 + r0 * cos(alpha) , y0 + r0 * sin(alpha))
 c2 = (x0 + r0 * cos(beta) , y0 + r0 * sin(beta))
(ca (cos alpha))
(sa (sin alpha))
; first common point
(a (+ x0 (* r0 ca))) ; a = x0 + r0 * cos(alpha)
(b (+ y0 (* r0 sa))) ; b = y0 + r0 * sin(alpha)
Computing orthogonal circle edit
Radius and center edit
At points of intersection radius r0 and new radius or orthogonal circle are also orthogonal. Center of new circle ( x,y) is on the line through point (x0,y0) and slope defined by angle gamma :
gamma = alpha + (balpha  alpha)/2
(gamma (+ alpha (/ ( balpha alpha) 2))) ; angle between alpha and balpha
Using this information one can compute new circle : (x,y,r)
new angles edit
One has:
 main circle (x0, y0m r0)
 new circle (x, y, r)
 point of intersections c1 and c2 and its angles : alpha and beta
Because arc will be drawn using new circle one has to compute (convert) new angles ( angles measured in new circle) :
angle of point c1 = (a,b) measured in new circle units.
(phi (atan r0 r))) ; phi = (newalpha  newbalpha)
(balha (+ pi gamma phi)) ; new balpha
(alpha ( (+ pi gamma) phi)) ; new alpha
Drawing arc edit
It depends of available procedures.
From point to point edit
Easiest case is drawing arc from point c1 to c2.
Postscript edit
In postscript there is arct procedure :^{[12]}
x1 y1 x2 y2 r arct
So in Lisp one can directly create ps file and use this procedure :
; code by Copyright 2009 Rubén Berenguel
; http://www.mostlymaths.net/2009/08/lavaursalgorithm.html
(defun DrawArc (alpha balpha R)
"Generate the postscript arcs using arct
x1 y1 x2 y2 r arct "
(format t "newpath ~A ~A moveto 300 300 ~A ~A ~A arct"
(+ 300 (* 100 (cos balpha)))
(+ 300 (* 100 (sin balpha)))
(+ 300 (* 100 (cos alpha)))
(+ 300 (* 100 (sin alpha)))
R))
SVG edit
In SVG there is the elliptical arc curve command.^{[13]}^{[14]}^{[15]}^{[16]}^{[17]}^{[18]}
It is a version of path command that draws an elliptical arc from the current point to (x, y).
The size and orientation of the ellipse are defined by two radii (rx, ry) and an xaxisrotation, which indicates how the ellipse as a whole is rotated relative to the current coordinate system.
The center (cx, cy) of the ellipse is calculated automatically to satisfy the constraints imposed by the other parameters.
largearcflag and sweepflag contribute to the automatic calculations and help determine how the arc is drawn.
rx ry xaxisrotation largearcflag sweepflag x y
<path d="M 100,100 a100,100 0 0,0 100,50" fill="none" stroke="red" strokewidth="6" />
<?xml version="1.0" standalone="no"?>
<svg width="800px" height="800px" version="1.1" xmlns="http://www.w3.org/2000/svg">
<path d="M100 100
A 100 100 0 0 0 162.55 162.45
" stroke="black" fill="none" strokewidth="2" fillopacity="0.5"/>
</svg>
SVG path elements :
 M100 100 specifies an absolute start point (100,100) for the circular arc
 A 100 100 means that both the major axis and the minor axis of this circular arc have the same length = 100
 0 0 0 are xaxisrotation largearcflag sweepflag
 162.55 162.45 is an end point of arc
So one can draw arc by writing path command to svg file like that :
(format streamname "<path d=\"M~,0f ~,0f A~,0f ~,0f 0 0 0 ~,0f ~,0f\" />~%"
(first arclist)
(second arclist)
(third arclist)
(third arclist)
(fourth arclist) ;
(fifth arclist))
Remember that initial coordinate system in SVG has the origin at the top/left with the xaxis pointing to the right and the yaxis pointing down.^{[19]} For drawing all arcs it may be not important, but labels with angels will be wrong.
From angle to angle edit
This case is harder, because one must convert angles from main circle to new, orthogonal circle. When angles are converted then :
 move current point to first point of arc ( intersection). Here c1 = (a,b)
 draw an arc. It is easier to draw arc clockwise instead of counterclockwise
In Vecto Common Lisp package there is arcn procedure ^{[20]}
(vecto:moveto ( sixth arclist) (seventh arclist)) ; beginning of arc is point (a,b)
(vecto:arcn
( first arclist) ; x
(second arclist) ; y
(third arclist) ; radius
(fourth arclist) ; angle1
(fifth arclist))) ; angle2
(vecto:stroke)
Examples of code edit
 Common Lisp code :
 for drawing poscript files by Ruben Berenguel^{[21]}
 for drawing png files using Vecto package
 for drawing svg files
 Haskell code with SVG output by Claude HeilandAllen
 c++ code from demo 4 page 7 from program Mandel by Wolf Jung
References edit
 ↑ Combinatorics in the Mandelbrot Set  Lavaurs Algorithm by
 ↑ Lavaurs algorithm by Michael Frame, Benoit Mandelbrot, and Nial Neger in lisp by Ruben Berenguel
 ↑ Abstract Mandelbrot tree by claudius maximus
 ↑ The Mandelbrot cactus by Robert L. Devaney
 ↑ Burns A M : : Plotting the escape An animation of parabolic bifurrcation in the mandelbrot set. Mathematics Magazine: Volume 75, Number 2, Pages: 104116 page 104
 ↑ Freddie Exall : An Introduction to Equivalant Matings
 ↑ A. DOUADY, Algorithms for computing angles in the Mandelbrot set (Chaotic Dynamics and Fractals, ed. Barnsley and Demko, Acad. Press, 1986, pp. 155168).
 ↑ Lavaurs, P., "Une description combinatoire de l'involution define par M sur les rationnels a denominateur impair," C. R. Acad. Sci. Paris 303 (1986), 143146.
 ↑ Combinatorics in the Mandelbrot Set  Lavaurs Algorithm by Michael Frame, Benoit Mandelbrot, and Nial Neger
 ↑ Constructing orthogonal circle from Fractal Geometry at Yale University by Michael Frame, Benoit Mandelbrot (19242010), and Nial Neger. Version : November 7, 2010
 ↑ Orthogonal Circle at planetmath.org
 ↑ Postscript Operators at Joint Stock Company
 ↑ SVG documentation : The elliptical arc curve commands
 ↑ svg basics description of arcs
 ↑ Elliptical arc implementation notes
 ↑ Paths at mozilla developer center
 ↑ arc at Pilat Informative Educative
 ↑ oreilly documentation
 ↑ The initial coordinate system  SVG documentation at w3.org
 ↑ arcn procedure from Vecto Common Lisp package by Zach Beane.
 ↑ lavaurs algorithm by Ruben Berenguel
See also edit
 lamination
 Lamination of Julia set
 noncrossing partitions of the circle

Topological model of Mandelbrot set( reflects the structure of the object ). Topological model of Mandelbrot set without mini Mandelbrot sets and Misiurewicz points (Cactus model)

Fractal rotate crop

Shrub model of Mandelbrot set