prev up inhalt next


8.5 Mandelbrot-Menge

Sei z eine komplexe Zahl mit Realteil z.re und Imaginärteil z.im :
    public class Komplex
    {
            double re;
            double im;

    ...

Das Quadrat einer komplexen Zahl z hat den Realteil z.re 2 - z.im 2 und den Imaginärteil 2 · z.re · z.im . Der Betrag einer komplexen Zahl c sei |c| = .
Betrachte die Funktion f : ,f (z) = z 2 + c für festes c .

    Komplex f(Komplex 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 z,f (z),f 2(z),f 3(z),... beginnend bei z = 0 für festes c .
Für manche c wächst der Betrag beliebig, für manche c konvergiert er zu einem Fixpunkt. Die Mandelbrotmenge besteht aus solchen komplexen Zahlen c , die beim Startwert z = 0 zur Konvergenz führen.
Um die Mandelbrotmenge grafisch darzustellen, definiert man

Ordne jedem Pixel (p.x,p.y) des Bildschirms eine komplexe Zahl zu wie folgt. Die linke obere Ecke bezeichne die komplexe Zahl start (z.B. - 2.15,2.15 ). Die rechte obere Ecke bezeichne die komplexe Zahl ende (z.B. 0.85,2.15 )
Dann ergibt sich bei 300 Pixeln pro Zeile eine Schrittweite von (0.85 + 2.15)/300 = 0.01 .
Somit läßt sich ein Koordinatenpaar (p.x,p.y) umrechnen durch den folgenden Konstruktor.

        public Komplex(Point p, Komplex 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 (p.x,p.y) das zur komplexen Zahl c gehörende Pixel. Dann färbe es mit farbe( c ).


Mandelbrotmenge: - 2.2 z.re 0.6 , - 1.2 z.im 1.2 , 100 Iterationen




prev up inhalt next