void mandel () { Point p; int zaehler; Komplex c, z; for (p.x = 0; p.x < WIDTH; p.x++) for (p.y = 0; p.y < HEIGHT; p.y++) { zaehler = 0; c = new Komplex(p, start, schritt); z = new Komplex(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 c zu veranschaulichen:
Es seien die Farben
farbe[0], ..., farbe[NUM_COL-1]
vorhanden
set_col_pixel (p, farbe [zaehler % NUM_COL])
Vom Mandelbrot-Algorithmus erzeugtes Bild mit Modulo 2 und 100 Iterationen
- 1.2548 Re - 1.2544 ,
0.3816 Im 0.3822
/*****************************************************************************/
/* Mandelbrotmenge */
/*****************************************************************************/
void mandel( // berechnet und zeichnet Mandelbrotmenge ab
Komplex start, // linker oberer Ecke start der komplexen Flaeche
double schritt, // mit Schrittweite schritt und
int max_iter, // Iterationsanzahl max_iter (muss gerade sein)
int fall) // gemaess Fall fall
// Abbruch erfolgt, wenn der Betrag groesser als 2 ist
// oder wenn Iterationszahl erreicht ist
{
Point p = new Point();
int zaehler ;
Komplex c;
Komplex z;
double tmp;
for (p.x = 0; p.x < WIDTH; p.x++)
for (p.y = 0; p.y < HEIGHT; p.y++)
{
c = new Komplex(p, start, schritt);
z = new Komplex(0.0, 0.0);
zaehler = 0;
while( (q_betrag(z) < 4.0) && (zaehler++ < max_iter) ) { // berechne f(z)
tmp = z.re;
z.re = z.re * z.re - z.im * z.im + c.re;
z.im = 2 * tmp * z.im + c.im;
}
switch (fall) {
case 1: if (q_betrag(z) < 4.0) set_pixel(p); break; // schwarz
case 2: if (q_betrag(z) < 4.0) set_pixel(p); else // schwarz
if ((zaehler %2) != 0) set_pixel(p); break; // mit modulo
case 3: if(zaehler == max_iter+1)
set_col_pixel(p,farbe[0]); else // Mandelbrotmenge selbst
set_col_pixel(p,farbe[zaehler%NUM_COL]); break; // farbe modulo
}
}
}