Als erstes müssen aus den bei jedem Fraktal angegebenen Mittelpunktskoordinaten
und Kantenlängen die Eckpunkt-Koordinaten berechnet werden. Die Koordinaten müssen als in der komplexen Ebene
liegend aufgefasst werden. Dabei gilt für jeden Punkt (x;y) innerhalb des von den Eckpunkten aufgespannten
Quadrats z = x + i*y oder anders ausgedrückt x = Re(z),
y = Im(z). i ist dabei natürlich die imaginäre Einheit (Wurzel aus -1).
Hiermit wird ein Feld C mit den Koordinaten jedes Pixels als komplexe Zahl aufgestellt.
Außerdem wird ein Integer-Feld N benötigt, das die selbe Größe wie C hat, aber zunächst
mit Nullen gefüllt ist.
Danach verzweigt sich das Programm, je nachdem, welchen Fraktal-Typ (Mandelbrot-Menge, Julia-Menge
oder Newton-Fraktal) man berechnen möchte. Für die Berechnung einer Mandelbrot-Menge wird C in c kopiert.
Ein gleichgroßes Feld z wird mit Nullen vorbesetzt. Bei Julia-Mengen gibt es ein Wertepaar, das als "Startwerte"
angegeben ist. Man kann die Startwerte als Koordinaten eines Punkts in der komplexen Ebene auffassen, der entweder in einer
Mandelbrotmenge liegen kann oder auch nicht. Liegt er in einer Mandelbrot-Menge, so wird die zugehörige Julia-Menge
zusammenhängend sein, wenn er das nicht tut, so ist die zugehörige Julia-Menge nicht-zusammenhängend. Aus dem
Startwertepaar (s1;s2) wird nach c = s1+i*s2
eine komplexe Konstante c berechnet, die diesmal - anders als bei Mandelbrot-Mengen - kein Feld ist. Die Variable
z dagegen bleibt ein komplexes Feld, dem seinerseits der Inhalt von C zugewiesen wird.
Von hier ab geht es
für Mandelbrot- und Julia-Mengen wieder gemeinsam weiter. In einer weitere Variablen z0 wird der
Anfangswert von z für den späteren Vergleich festgehalten. Jetzt kommt eine Schleife, die so oft durchlaufen
wird, wie die Anzahl der Iterationen im Kalender angibt. Innerhalb der Schleife wird die angegebene Formel als Funktion
f auf jedes Element von z angewandt und somit ein neues z erzeugt. In der Formel tauchen sowohl z
als auch c wieder auf, die wir zu Anfang vorbesetzt hatten. Dann kommt das Feld N ins Spiel: hier wird für
jedes Pixel, bei dem der Absolutbetrag von (z-z0) kleiner als das Abbruchkriterium ist, der Wert
inkrementiert. In den meisten Fällen liefert das Feld N später das eigentliche Bild.
|
Sobald die Zahl der Iterationen abgearbeitet ist, kann das Fraktal dargestellt werden. Hierbei sollte man allerdings nicht
nur auf N fixiert bleiben, sondern auch mal einen Blick auf den Realteil, den Imaginärteil oder den Absolutbetrag
von z werfen - oder gar eine Kombination daraus. Es kann auch sinnvoll sein, den Logarithmus des Ergebnisses zu betrachten.
Dabei muss man sich allerdings überlegen, wie man mit negativen und Null-Werten im Ergebnisfeld umgehen will.
Die Darstellung geschieht in der Weise, dass man eine Farbpalette aufstellt, die jedem Wert (oder Werteintervall) in der
Ergebnismatrix eine Farbe zuweist.
Es fehlen noch die Erläuterungen zur Berechnung von Newton-Fraktalen.
Hier wird c nicht benötigt und einfach auf Null gesetzt. Wie bei den Julia-Mengen wird z das Feld C
zugewiesen. Die Anfangswerte von z werden wieder in z0 festgehatlten. Auch diesmal kommt eine Schleife,
die so oft durchlaufen wird, wie die Anzahl der Iterationen im Kalender angibt. Auch hier wird innerhalb der Schleife die
angegebene Formel als Funktion f auf jedes Element von z angewandt und somit ein neues z erzeugt. In der
Formel taucht zwar z, nicht aber c auf. Das Abbruchkriterium wird hier etwas anders verwendet als bei Mandelbrot-
und Julia-Mengen: An jeder Stelle, an der der Absolutbetrag von (z-z0) den Kehrwert des
Abbruchkriteriums überschreitet, wird das Feld N inkrementiert. Innerhalb der Schleife wird hier auch z
als neues z0 genommen. Das bewirkt, dass sich die Auswertung des Abbruchkriteriums auf die Änderungen von
z bezieht.
Nach Ende der Schleife kann wieder eins der Felder N, abs(z), Re(z), Im(z) oder eine
(Linear-)Kombination daraus als Ergebnis dargestellt werden. Auch hier kann man wieder den Logarithmus verwenden.
Ich selbst habe es als sehr nützlich empfunden, dem Programm eine graphische Bedienungsoberfläche (GUI)
zu gönnen.
|