Vergrößerung an der Mandelbrotmenge

MandelbrotmengeBesonders schöne Fraktale erhalten Sie in den Teilprogrammen Apfelmännchen, Julia-Mengen und deren Verbindung miteinander unter Mandelbrot-Julia-Mengen.

Im vierten Teilprogramm zu diesem Thema können Sie an der Mandelbrotmenge z² + c, dem Apfelmännchen, Vergrößerungen zeichnen lassen.

In der links dargestellten Mandelbrotmenge befindet sich ein roter Punkt. Dieser beschreibt die Koordinaten des Mittelpunktes aller zu zeichnenden Vergrößerungen. Diesen Punkt können Sie mit der Maus verschieben oder in die Eingabefelder Zielpunkt dessen Koordinaten direkt eintragen.

Mandelbrot2Zielpunkt x = -1.41, y = 0

Wählen Sie Vergrößerungen zeichnen, so konstruiert das Programm sechs Ausschnitte der Mandelbrotmenge.
Die zugehörigen Vergrößerungsfaktoren können in der Tabelle verändert werden. Der größtmögliche Faktor ist 100 Millionen!

Beachten Sie bitte: Die sehr komplexen Berechnungen und Darstellungen erfordern auch auf schnellen Computern einige Zeit. Unter Umständen kann dies sogar sehr lange dauern, insbesondere wenn Sie einen Zielpunkt gewählt haben, der sich in einem Konvergenzbereich befindet. Abbrechen können Sie mit dem entsprechenden Schalter.

Mandelbrotmenge
Herunterladen

Download

Dieser Programmteil ist ebenso als eigenständiges Programm ladbar.

Erklärung der Mandelbrotmenge

Die Mandelbrotmenge ist die Menge aller komplexen Zahlen c, für welche die durch

z0 = 0 ;  zn+1 = zn² + c

rekursiv definierte Folge beschränkt ist. Bilder der Mandelbrotmenge können erzeugt werden, indem für jeden Wert des Parameters c ein Farbwert in der komplexen Ebene zugeordnet wird.
Die grafische Darstellung wurde später von der Bremer Forschungsgruppe für komplexe Dynamik Apfelmännchen genannt.

Entstehung der Mandelbrotmenge

Die Berechnungsformel der Mandelbrotmenge lautet vereinfacht „quadriere die Zahl z und addiere die Zahl c“. Da z eine komplexe Zahl ist, kann das Ergebnis in der Gaußschen Zahlenebene veranschaulicht werden.
Eine komplexe Zahl besteht aus zwei Teilen (bzw. Zahlen) und kann daher einen Punkt in der zweidimensionalen komplexen Ebene darstellen. Die Berechnungsformel wird benutzt, herauszufinden, welche Farbe solch ein Punkt bekommen soll.

Die Abbildung zeigt den ersten Iterationsschritt zweier Punkte (grün und blau): Der Punkt z0 (rechter grüner Pfeil) dessen Farbe bestimmt werden soll, wird zunächst quadriert. Das Ergebnis ist der Punkt, auf den der mittlere grüne Pfeil zeigt. Nun wird der Startpunkt c addiert und man z1 (ganz oben).
Für weitere Schritte wird der Punkt in die Gleichung

zn+1 = zn² + c

eingesetzt. Das Ergebnis zn+1 wird solange immer wieder neu als zn genutzt, bis der Abstand des berechneten Punktes vom Ursprung einen bestimmten Wert (z.B. 100) überschreitet:

z0 = c ; z1 = z0² + c ; z2 = z1² + c ; …

Ist der Abstand von zn zum Ursprung auch nach einer festgelegten Anzahl von Iterationen immer noch klein, so konvergiert die Zahlenfolge und dieser Punkt wird in der Regel schwarz eingefärbt. Wird der Abstand von 100 jedoch schon bei der n-ten Iteration überschritten, so wird die n-te Farbe einer Farbpalette ausgewählt.

Einfache Delphi-Routine

procedure TForm1.Button1Click(Sender: TObject);
var bitmap:tbitmap;
x,y,xneu,cx,cy,xa,ya,xbreite,yhoehe:double;
i,j,iterationen,anzahl:integer;
bildbreite,bildhoehe:integer;
begin
bitmap:=tbitmap.Create; //Bitmap herstellen
bitmap.Width:=paintbox1.Width;
bitmap.Height:=paintbox1.Height;
xa:=-2.5; //Startwerte links und unten + Intervallbreite x und y
ya:=-1.5;
xbreite:=4;
yhoehe:=3;
iterationen:=strtoint(edit1.Text); //Iterationszahl
bildbreite:=bitmap.Width; //Bildmaße
bildhoehe:=bitmap.Height;
//Zwei Schleifen i = x und j = y
for i:=0 to bildbreite do begin
for j:=0 to bildhoehe do begin //Achtung y läuft von oben nach unten
//Koordinate des Punktes ermitteln, d.h. cx und cy
cx:=i*xbreite/bildbreite + xa;
cy:=j*yhoehe/bildhoehe + ya;
//Berechnungen
anzahl:=0; //Iterationszähler
x:=0; //Startkoordinate (0,0)
y:=0;
repeat
xneu:=x*x-y*y+cx; //Realteil
y:=2*x*y+cy; //Imaginärteil
x:=xneu;
inc(anzahl); //durchgeführte Iterationen
until (x*x+y*y>4) or (anzahl>=iterationen); //Abruch bei |z|>2
//Farbe auswählen
bitmap.Canvas.Pixels[i,j]:=superfarben[anzahl mod 30];
end;
//Zwischenanzeige des schon berechneten Bildes
if i mod 100 = 0 then begin
paintbox1.Canvas.draw(0,0,bitmap);
application.ProcessMessages;
end;
end;
//Bitmap kopieren
paintbox1.Canvas.draw(0,0,bitmap);
//Bitmap wieder löschen
bitmap.Free;
end;