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



Benoît B. Mandelbrot: Die fraktale Geometrie der Natur
- Anzeige -


- JavaScript : Fraktale : Juliamenge 2 -


Die fraktale Juliamenge 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


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();
  var p=0;
  maxZo=5999;
  reC=-0.02911637885189016;
  imC=0.7277142233330573;

  // Punkte in div-Tags schreiben
  for(z=0;z<maxZo+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=maxZo+1;
  }
  else counter=false;

  // Zo-Wert zufällig auswählen, Intervall: -1.3 <= reZ[0] <= -1.3,  -1.3 <= imZ[0] <= 1.3
  function randomZo() {
    n=0;
    reZ[0]=Math.random()*2.6-1.3;
    imZ[0]=Math.random()*2.6-1.3;
    checkZo();
  }

  // nach der rekursiven Gleichung: Z[n+1] = Z[n]^2 + C überprüfen,
  // ob Zo zur Juliamenge gehört ((Zn) nicht divergiert).
  function checkZo() {
    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<20) {
      if(reZ[n]*reZ[n]+imZ[n]*imZ[n]>200) setTimeout('randomZo()',1);
      else checkZo();
    }
    else if(n<30) {
      if(reZ[n]*reZ[n]+imZ[n]*imZ[n]>200) setTimeout("colorZo='#ffd700';setZo()",1);
      else checkZo();
    }
    else if(n<50) {
      if(reZ[n]*reZ[n]+imZ[n]*imZ[n]>200) setTimeout("colorZo='#ff9900';setZo()",1);
      else checkZo();
    }
    else {
      if(reZ[n]*reZ[n]+imZ[n]*imZ[n]>200) setTimeout("colorZo='#ff4500';setZo()",1);
      else if(n==99) setTimeout("randomZo()",1);
      else checkZo();
    }
  }

  // gefundene Punkte anzeigen, Nullpunkt = 120/120, Vergrößerungsfaktor = 70
  function setZo() {
    //ie5+,nn6+
    if(document.getElementById) {
      document.getElementById("P"+p).style.color=colorZo;
      document.getElementById("P"+p).style.left=120+reZ[0]*70;
      document.getElementById("P"+p).style.top=120+imZ[0]*70;
    }
    //ie4+
    else if(document.all) {
      document.all.tags("div")[p].style.color=colorZo;
      document.all.tags("div")[p].style.left=120+reZ[0]*75;
      document.all.tags("div")[p].style.top=120+imZ[0]*75;
    }
    //nn4x
    else if(document.layers) {
      //document.layers[p].color=colorZo;  ... geht leider nicht,
      // deshalb oben auf Weiß gesetzt !
      document.layers[p].left=120+reZ[0]*75;
      document.layers[p].top=120+imZ[0]*75;
    }
    if(counter) document.F1.E1.value=maxZo-p;
    if(p<maxZo) setTimeout('p++;randomZo()',1);
    else if(counter) document.F1.E1.value="";
  }

</script>

Gestartet wird die Berechnung der Juliamenge durch den Aufruf der Funktion randomZo().


Nachstehend ein extremes Beispiel dafür, was mit diesem JavaScript 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. (Überings der gleiche C-Wert wie in obiger Demo-Version.)


Die fraktale Juliamenge mit JavaScript    44.000 Punkte
   Rechenzeit: 12 Stunden
   mit JavaScript im IE 5.5
   auf 900 MHz-Rechner

   Zn+1 = Zn² + C
   reC = -0.02911637885189016
   imC = 0.7277142233330573

   Divergenzkriterium:
   reZn² + imZn² > 200

   Gelb: 20 ≤ n ≤ 29
   Orange: 30 ≤ n ≤ 49
   Rot: 50 ≤ n ≤ 99



Download  Juliamenge_2.zip (ca. 2 kb)




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