Java & JavaScript


Home
Applets
Scripts
   Navigation:
 · Kontextmenü
 · Linkwechsler
   Dialogboxen:
 · Alert
 · Alert 2
 · Confirm
 · Prompt
   Animation:
 · Kreis
 · Kreis 2
 · Kreis 3
 · Drei Kreise
 · Spirale
 · Planetarium
 · Globus
   Grafik-Effekte:
 · Clipping
 · Clipping 2
 · Clipping 3
 · Alpha-Clipping
 · Fading
 · Wellenmuster
 · Wellenmuster 2
   Bildschirmschoner:
 · Proto
 · Marquee
 · Donut
 · Worm
 · Mondrian
 · Pacman
   Datum & Uhrzeit:
 · Countdown
 · Countup
 · Wochentag
 · Last Modified
   Fraktale:
 · Apfelmännchen
 · Apfelmännchen 2
 · Juliamenge
 · Juliamenge 2
 · C-Wert-Generator
   Mathematik:
 · Primzahlen
 · Primzahlen 2
   Verschiedenes:
 · Dynamic Popup
 · TextArea Counter
 · Warteschleife
 · Mausschreiber
Gäste
Kontakt



Peitgen/Jürgens/Saupe: Bausteine des Chaos. Fraktale
- Anzeige -


- JavaScript : Fraktale : Apfelmännchen -


Das fraktale Apfelmännchen mit JavaScript.

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


Demo:  hier starten


JavaScript-Quellcode:

<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(reZ[n]*reZ[n]+imZ[n]*imZ[n]>200) setTimeout('randomC()',1);
    else if(n==99) setC();
    else checkC();
  }

  // gefundene Punkte anzeigen, Nullpunkt = 150/90, Vergrößerungsfaktor = 50
  function setC() {
    // ie5+,nn6+
    if(document.getElementById) {
      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.left=150+reC*50;
      document.all.tags("div")[p].style.top=90+imC*50;
    }
    // nn4x
    else if(document.layers) {
      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().

Die 5000 Punkte des vorstehenden Beispiels, sowie die gewählte Auflösung, reichen natürlich noch nicht aus, um Einzelheiten im Apfelmännchen zu betrachten. Jedoch ist das wohl die zumutbare Grenze für einen ersten Blick in die Wunderwelt der JavaScript-Fraktale :-)
Wenn das Fraktal anfängt sich aufzubauen, können Sie die weitere Entwicklung auch offline beobachten. Nach kleinen Modifikationen sogar mit wesentlich mehr Punkten und schärferen Rändern.
Mit etwa 30 bis 50-Tausend Punkten lässt sich dann schon einiges anfangen. Jedoch dauert das seine Zeit.
Mit dem Internet Explorer habe ich bis zu 61.000 Punkte geschafft, die aber geschlagene 18 Stunden(!) brauchten, bis sie alle ihren Platz im Apfelmännchen gefunden hatten. (siehe Apfelmännchen 2)

Download  Apfelmaennchen.zip (ca. 2 kb)




© 2001-2004 Albert Kluge - Alle Rechte vorbehalten
Impressum | Datenschutz | Nutzung | eMail