public class Complex { double re; double im; ...Das Quadrat einer komplexen Zahl
Complex f(Complex z) { double tmp; tmp = z.re; z.re = z.re * z.re - z.im * z.im + c.re; z.im = 2 * tmp * z.im + c.im; return z }Betrachte die Folge
Für manche konvergiert sie zu einem Fixpunkt,
für manche
gerät sie in einen (beschränkten) Zyklus,
für manche
verhält sie sich (beschränkt) chaotisch,
für manche
strebt die Folge gegen Unendlich.
Die
besteht aus solchen komplexen Zahlen
, die beim
Startwert
zu einer beschränkten Folge führen.
Um die Mandelbrotmenge grafisch darzustellen, definiert man
Ordne jedem Pixel des Bildschirms eine komplexe Zahl
zu wie folgt. Die linke obere Ecke bezeichne die komplexe Zahl
start
(z.B.
).
Die rechte obere Ecke bezeichne die komplexe Zahl ende
(z.B.
)
Dann ergibt sich bei Pixeln pro Zeile eine Schrittweite von
.
Somit läßt sich ein Koordinatenpaar umrechnen durch den folgenden
Konstruktor.
public Complex(Point p, Complex start, double schritt) // bildet die komplexe Zahl zum Pixel p mit linker/oberer Ecke start // und Schrittweite schritt { this.re = start.re + schritt * (double)p.x; this.im = start.im - schritt * (double)p.y; }
Sei das zur komplexen Zahl
gehörende Pixel.
Dann färbe es mit farbe(
).
Implementation der Mandelbrot-Menge
Sobald während des Iterierens der Betrag von
Folge wächst mit Sicherheit über alle Grenzen (Satz von Fatou).
Falls Betrag von
nach z.B. 100 Iterationen noch
Folge bleibt vermutlich beschränkt.
D.h., bei Erreichen einer vorgegebenen Iterationenzahl wird das Pixel,
welches der komplexen Zahl entspricht, schwarz gefärbt, da
vermutlich zu einer beschränkten Folge führt.
void mandel () { Point p; int zaehler; Complex c, z; for (p.x = 0; p.x < WIDTH; p.x++) for (p.y = 0; p.y < HEIGHT; p.y++) { zaehler = 0; c = new Complex(p, start, schritt); z = new Complex(c); while ((betrag (z) < 2.0) && (zaehler++ < max_iter)) z = f(z); if (betrag(z) < 2.0) set_pixel(p); } }
Also ergibt sich:
if (betrag < 2.0) set_pixel (p); else if ((zaehler % 2) != 0) set_pixel (p);
Bei Farbbildschirmen gibt es folgende Möglichkeit,
die Divergenzgeschwindigkeit der
Folge für ein zu veranschaulichen:
Es seien die Farben farbe[0], ..., farbe[NUM_COL-1] vorhanden
set_col_pixel (p, farbe [zaehler % NUM_COL])