Zum Verständnis für den Praktiker soll hier mal das Berechnungsverfahren an Hand eines kleinen Programmes verdeutlicht werden. (Ich hab es in Javascript implementiert, mich aber dabei mit Programmiersprachen-spezifischen Dingen möglichst zurückgehalten. Es dürfte daher wohl auch für die Entwickler mit C, Java, Basic und Co. lesbar sein ;-)
Als Unter-Menü-Punkte finden sich Detail-Informationen über die Funktion sowie ein praktischer «Probelauf» :-)
Das gesamte Programm (gerade mal etwa 100 Zeilen!) lautet wie folgt:
/*
* Demo-Skript zur Berechnung der Mandelbrotmenge
* - Stand 29.09.2026 -
* von speerchen, www.speerchen.de
*/
function demo() {
bildElement = document.getElementById('fraktal');
if (bildElement.getContext('2d')) {
bild = bildElement.getContext('2d');
} else {
alert("Die erforderliche Grafikfunktion ist im Browser leider nicht vorhanden.");
}
/*
* Breite des Bildes in Pixel
*/
var breite = 320;
/*
* Hoehe des Bildes in Pixel
*/
var hoehe = 240;
/*
* Linke Kante der Grundfigur
*/
var intervallLinks = -3.0;
/*
* Untere Kante der Grundfigur
*/
var intervallUnten = -1.875;
/*
* Rechte Kante der Grundfigur
*/
var intervallRechts = 2.0;
/*
* Obere Kante der Grundfigur
*/
var intervallOben = 1.875;
/*
* Maximale Rekursionstiefe
*/
var grenzeRekursion = 50;
/*
* Betragsgrenze Rekursion
*/
var grenzeBetrag = 4.0;
/*
* Quadrat der Betragsgrenze Rekursion
*/
var grenzeBetragQuadrat = grenzeBetrag * grenzeBetrag;
/*
* Farbtabelle
*/
var farben = new Array("rgb(0,0,0)",
"rgb(0,0,64)", "rgb(0,0,85)", "rgb(0,0,106)", "rgb(0,0,127)", "rgb(0,0,148)",
"rgb(0,0,170)", "rgb(0,0,191)", "rgb(0,0,212)", "rgb(0,0,233)", "rgb(0,0,255)",
"rgb(6,6,249)", "rgb(12,12,243)", "rgb(19,19,236)", "rgb(25,25,230)", "rgb(31,31,224)",
"rgb(38,38,218)", "rgb(44,44,211)", "rgb(51,51,204)", "rgb(57,57,198)", "rgb(63,63,192)",
"rgb(70,70,185)", "rgb(76,76,179)", "rgb(82,82,173)", "rgb(89,89,166)", "rgb(95,95,160)",
"rgb(102,102,153)", "rgb(108,108,147)", "rgb(114,114,141)", "rgb(121,121,134)", "rgb(127,127,128)",
"rgb(133,133,122)", "rgb(140,140,115)", "rgb(146,146,109)", "rgb(153,153,102)", "rgb(159,159,96)",
"rgb(165,165,90)", "rgb(172,172,83)", "rgb(178,178,77)", "rgb(184,184,71)", "rgb(191,191,64)",
"rgb(197,197,58)", "rgb(204,204,51)", "rgb(210,210,45)", "rgb(216,216,39)", "rgb(223,223,32)",
"rgb(229,229,26)", "rgb(235,235,20)", "rgb(242,242,13)", "rgb(248,248,7)", "rgb(0,0,0)");
/*
* Bildaufbau
*/
for (var pixelY = 0; pixelY < hoehe; pixelY++) {
var y = intervallUnten + (intervallOben - intervallUnten) * pixelY / (hoehe - 1);
for (var pixelX = 0; pixelX < breite; pixelX++) {
var x = intervallLinks + (intervallRechts - intervallLinks) * pixelX / (breite - 1);
var zaehler = 0;
var gliedX = 0;
var gliedY = 0;
var gliedXQuadrat = 0;
var gliedYQuadrat = 0;
do {
var hilfX = gliedX * gliedY;
gliedX = gliedXQuadrat - gliedYQuadrat + x;
gliedY = hilfX + hilfX + y;
gliedXQuadrat = gliedX * gliedX;
gliedYQuadrat = gliedY * gliedY;
zaehler++;
} while (zaehler < grenzeRekursion
&& gliedXQuadrat + gliedYQuadrat < grenzeBetragQuadrat);
bild.fillStyle = farben[zaehler];
bild.fillRect(pixelX, hoehe - pixelY,1,1);
}
}
}