Das fraktale Apfelmännchen mit JavaScript in Farbe.
Erfolgreich getestet mit Internet Explorer 5.5 und 6.0, Netscape Navigator 7.1, Mozilla 1.21 und 1.4.
Netscape 4.75, 6.01 - 6.22 und 7.0 laden und rechnen langsam
Opera 5.02, 5.11, 6.0, 6.01 und 7.01 laden z.T. sehr langsam
Mozilla 1.0 läd und rechnet sehr langsam
<script language="JavaScript">
// Punkte zunächst außerhalb des sichtbaren Bildschirms platzieren
document.write("
<style type='text/css'>div{position:absolute;left:-300px;top:-300px}</style>");
// Komplexe Zahlen, maxC=Anzahl der Punkte
var reZ=new Array();
var imZ=new Array();
reZ[0]=0;
imZ[0]=0;
var reC, imC;
var p=0;
maxC=4999;
// Punkte in div-tags schreiben
for(z=0;z<maxC+1;z++) document.write("<div id='P"+z+"'>.</div>");
// Punkte-Zähler für ie5+, nn6+
if(document.getElementById && document.styleSheets) {
counter=true;
document.write("<form name='F1'><input name='E1'></form>");
document.F1.E1.value=maxC+1;
}
else counter=false;
// C-Wert zufällig auswählen, Intervall: -2 <= reC <= 0.5, -1.25 <= imC <= 1.25
function randomC() {
n=0;
reC=Math.random()*2.5-2;
imC=Math.random()*2.5-1.25;
checkC();
}
// nach der rekursiven Gleichung: Z[n+1] = Z[n]^2 + C überprüfen,
// ob C zur Mandelbrotmenge gehört ((Zn) für gewähltes C nicht divergiert). Z[o]=0
function checkC() {
n++;
reZ[n]=reZ[n-1]*reZ[n-1]-imZ[n-1]*imZ[n-1]+reC;
imZ[n]=2*reZ[n-1]*imZ[n-1]+imC;
if(n<10) {
if(reZ[n]*reZ[n]+imZ[n]*imZ[n]>200) setTimeout('randomC()',1);
else checkC();
}
else if(n<17) {
if(reZ[n]*reZ[n]+imZ[n]*imZ[n]>200) setTimeout("colorC='#ffd700';setC()",1);
else checkC();
}
else {
if(reZ[n]*reZ[n]+imZ[n]*imZ[n]>200) setTimeout("colorC='#ff4500';setC()",1);
else if(n==99) setTimeout("randomC()",1);
else checkC();
}
}
// gefundene Punkte anzeigen, Nullpunkt = 150/90, Vergrößerungsfaktor = 50
function setC() {
//ie5+,nn6+
if(document.getElementById) {
document.getElementById("P"+p).style.color=colorC;
document.getElementById("P"+p).style.left=150+reC*50;
document.getElementById("P"+p).style.top=90+imC*50;
}
//ie4+
else if(document.all) {
document.all.tags("div")[p].style.color=colorC;
document.all.tags("div")[p].style.left=150+reC*50;
document.all.tags("div")[p].style.top=90+imC*50;
}
//nn4x
else if(document.layers) {
// document.layers[p].color=colorC;
// ... geht leider nicht, deshalb oben auf Weiß gesetzt !
document.layers[p].left=150+reC*50;
document.layers[p].top=90+imC*50;
}
if(counter) document.F1.E1.value=maxC-p;
if(p<maxC) setTimeout('p++;randomC()',1);
else if(counter) document.F1.E1.value="";
}
</script>
Gestartet wird die Berechnung des Fraktals durch den Aufruf der Funktion randomC().
Nachstehend ein extremes Beispiel dafür, was mit diesem Script möglich ist (beachten Sie aber auch die extreme Rechenzeit). Die technischen Daten beziehen sich auf die Angaben im Script und erlauben eine nahezu exakte Reproduktion des Bildes.
61.000 Punkte
Rechenzeit: 18 Stunden
mit JavaScript im IE 5.5
auf 900 MHz-Rechner