# Fractals/mcmullen

C programs by Curtis T McMullen

# How to run
## julia.tar

* description
Steps:
* run tcsh
* make
* copy ps2gif script to each subdirectory
* add ./ to each run script
* run

# Names

* "Eye" of elephant resting on internal angle p/q of main cardioid = principal Misiurewicz point

# Images

* julia.tar
* Mandelbrot set at Fibonacci point c = -1.8705286321646448888906
* Airplane Julia set. C is the center of period 3 component on the real axis
* Disconnected Julia set near period 16 component ( wake 1/16)
* disconnected ( Cantor) Julia set from wake 1/19
* kleinian.tar
* Kleinian group limit set on sphere
* Schottky (Kleinian) group limit set in plane

# code
## External ray
### Drawing dynamic external ray using inverse Boettcher map by Curtis McMullen

This method is based on C program by Curtis McMullen and its Pascal version by Matjaz Erat
There are 2 planes here :
* w-plane ( or f0 plane )
* z-plane ( dynamic plane of fc plane )
Method consist of 3 big steps :
* compute some w-points of external ray of circle for angle $\theta \,$ and various radii (rasterisation)
    $w_{0}=R*e^{2\pi it}\,$ where $1<R<\infty \,$
* map w-points to z-point using inverse Boettcher map $\Psi _{c}=\Phi _{c}^{-1}\,$
    $z_{0}=\Psi _{c}(w_{0})=f_{c}^{-n}(w_{0}^{2^{n}})\,$
* draw z-points ( and connect them using segments ( line segment is a part of a line that is bounded by two distinct end points )
First and last steps are easy, but second is not so needs more explanation.

#### Rasterisation

For given external ray in $f_{0}\,$ plane each point of ray has :
* constant value $t\,$ ( external angle in turns )
* variable radius $R\,$
so $w\,$ points of ray are parametrised by radius $R\,$ and can be computed using exponential form of complex numbers :
    $w=F_{t}(R)=R*e^{2*\Pi *i*t}\,$
One can go along ray using linear scale :
It gives some w points with equal distance between them.
Another method is to use nonlinera scale.
To do it we introduce floating point exponent $r\,$ such that :
    $R=2^{r}\,$
and
    $w=G_{t}(r)=2^{r}*e^{2*\Pi *i*t}\,$
To compute some w points of external ray in $f_{0}\,$ plane for angle $t\,$ use such Maxima code :
In this method distance between points is not equal but inversely proportional to distance to boundary of filled Julia set.
It is good because here ray has greater curvature so curve will be more smooth.

#### Mapping

Mapping points from $f_{0}\,$-plane to $f_{c}\,$-plane consist of 4 minor steps :
* forward iteration in $f_{0}\,$ plane
    $w_{n}=w_{0}^{2^{n}}=R^{2^{n}}*e^{2\pi i2^{n}t}\,$
until $w_{n}\,$ is near infinity
    $abs(w_{n})>R_{limit}\,$
* switching plane ( from $f_{0}\,$ to $f_{c}\,$)
    $z_{n}=w_{n}\,$
( because here, near infinity : $w=z\,$)
* backward iteration in $f_{c}\,$ plane the same ( $n\,$) number of iterations
* last point $z_{0}\,$ is on our external ray
1,2 and 4 minor steps are easy. Third is not.
    $z_{n-1}=f_{c}^{-1}(z_{n})={\sqrt {z_{n}-c}}\,$
Backward iteration uses square root of complex number. It is 2-valued functions so backward iteration gives binary tree.
One can't choose good path in such tree without extre informations. To solve it we will use 2 things :
* equicontinuity of basin of attraction of infinity
* conjugacy between $f_{0}\,$ and $f_{c}\,$ planes

#### Equicontinuity of basin of attraction of infinity

Basin of attraction of infinity ( complement of filled-in Julia set) contains all points which tends to infinity under forward iteration.
$A_{f_{c}}(\infty )\ {\overset {\underset {\mathrm {def} }}{=}}\ \{z\in \mathbb {C} :f_{c}^{(k)}(z)\to \infty \ as\ k\to \infty \}.$
Infinity is superattracting fixed point and orbits of all points have similar behaviour. In other words orbits of 2 points are assumed to stay close if they are close at the beginning.
It is equicontinuity ( compare with normality).
In $f_{c}\,$ plane one can use forward orbit of previous point of ray for computing backward orbit of next point.

#### Detailed version of algorithm

* compute first point of ray (start near infinity ang go toward Julia set )
    $w=2^{r}*e^{2\Pi it}\,$ where $r=r_{max}\,$
here one can easily switch planes :
    $z=w\,$
It is our first z-point of ray.
* compute next z-point of ray
** compute next w-point of ray for $r=r*caution\,$
** compute forward iteration of 2 points : previous z-point and actual w-point. Save z-orbit and last w-point
** switch planes and use last w-point as a starting point :$z_{n}=w_{last}\,$
** backward iteration of new $z_{n}\,$ toward new $z_{0}\,$ using forward orbit of previous z point
** $z_{0}\,$ is our next z point of our ray
* and so on ( next points ) until $r<r_{Min}\,$
Maxima CAS src code

## colors
# References

* ↑ programs by Curtis T McMullen
* ↑ How to run programs
* ↑ c program by Curtis McMullen (quad.c in Julia.tar.gz)
* ↑ Quadratische Polynome by Matjaz Erat
* ↑ wikipedia : Complex_quadratic_polynomial / planes / Dynamical_plane
* ↑ wikipedia : Line segment