External angle of filled Julia set


Maxima version of quad.c program and image

First compute angle (= argument) of complex number in turns = <0;1>

ArcTan2 is a function of unit Math


Function Turns(x,y:extended):extended;
// gives argument of complex number z:=x+y*i
// turn=ArcusTangens (y/x)
// gives value in turns <0;1>
begin
if (x < > 0) or (y < >0)
  then
   begin
    if y>0 then result := ArcTan2(y, x)/(2*Pi)

     else result := 1+ArcTan2(y,x)/(2*Pi);
   end
  else if y = 0.0
    then result := 0.0 // y=0
    else if y > 0
      then result := 1/4 //x=0 y>0
      else result := 3/4; //x=0 y<0
end;

Then you can compute external angle of point out of M ( exterior of M-set = C\M):

external angle = Arg M(c) = Arg ( Phi  M ( c) ) where Phi  M it is a Boettcher map
so take a complex point c
check if it is out of M ( iterate it , if last iteration < IterationMax then c is in the complement of M-set)
compute Boettcher coordinate
compute argument of Boettcher coordinate = external argument = external angle



Then you can draw binary decomposition of out of Mandelbrot set( exterior of M-set = C\M)

Now it is the time to draw external rays ( field lines of potential ) of M-set
There are 2 methods:


External ray is a line which consists of points with the same external angle.
External ray is perpendicular to contour lines ( equipotential lines).
All field lines land on the boundary of M-set if M-set is locally connected ( it is not proven)
If p/q is rational number then external ray = r* e^(2*pi*i*p/q) lands on the boundary of M-set. [Douady and Hubbard]


type TRationalNumber= record nominator, denominator:word end;

Procedure DoublingMap( ExternalAngle1:TRationalNumber; var ExternalAngle2:TRationalNumber);
// function defined on the circle
begin
ExternalAngle2.nominator:=2* ExternalAngle1.nominator mod ExternalAngle1.denominator;
ExternalAngle2.denominator:=ExternalAngle1.denominator;
end;

//----------------------------------------------------

function PeriodUnderD( ExternalAngle1:TRationalNumber):integer;
var nominatorTemp,nominator1,nominator2,
i:integer;
begin
//
result:=0;
//
nominator1:= ExternalAngle1.nominator;
NominatorTemp:=nominator1;
for i:= 1 to 100 do
begin
nominator2:=2 * nominatorTemp mod externalAngle1.denominator;

if nominator1=nominator2
then
begin
result:=i;
exit;
end
else nominatorTemp:=nominator2;
end;
end;

//----------------------------------------------------------------


Programs that can draw external rays:

Papers:

www pages:



Main page


Feel free to e-mail me!

Author: Adam Majewski
adammaj1-at-o2-dot-pl
About

http://republika.pl/fraktal/

2005-07-02