1 Fraktale Julia-Mengen die Mandelbrotmenge komplexe Abbildungen realisiert als JAVA-Applet
2 z z 2 z=2+i Beispiel 1: z=2+i Erinnerung: Komplexe Zahlen
3 z z 2
4 Problem: Jede komplexe Zahl verhält sich unter der Abbildung z z 2 anders. Welche Zahlen liegen in einem bestimmten Radius ? Welche Zahlen fliegen bei einer bestimmten Anzahl von Hintereinanderausführungen der Abbildung aus jedem Radius heraus ? Hintereinanderausführung einer Abbildung wird als Iteration der Abbildung bezeichnet.
5 Unterteilung der komplexen Zahlenebene in zwei Bereiche: Punkte, die nach einer bestimmten Anzahl n von Iterationen innerhalb eines bestimmten Radius liegen (Gefangenenpunktmenge) Punkte, die außerhalb dieses Radius liegen (Fluchtpunktmenge) Idee des Mathematikers Julia um 1900:
6 Die Julia-Gefangenenpunktmenge für die Konstante C= i nach Iterationen 6
7 Ansätze der Realisierung a) Realisierung als Applikation schlechte Portabilität ins Internet JAVA-Viewer nötig zum Berechnen der Fraktale b) Realisierung als Applet von jeder Maschine aus ausführbar (im Browser) das Programm kann beliebig weitergegeben werden c) Gleichzeitige Realisierung von a) und b) Konflikte zwischen Applet und Frames müssen abgefangen werden höherer Programmieraufwand
8 Realisierung als Applet Interaktivität des Programms i.A. auf zwei Arten möglich: a) AWT komfortable Steuerung wie in Anwendungen Programm erfordert jedoch hohe Rechenleistung, und da nicht multithreaded programmiert wurde, können während des Zeichenvorgangs keine Events bearbeitet werden !! b) Parameterübergabe aus HTML-Code Individuelle Einstellung möglich, jedoch nur eingeschränkte Interaktivität Dennoch zur Zeit einzige sinnvolle Lösung
9 Parameter String [][] info = { {PARAM_CRe,"double","Konstante, Realteil"}, {PARAM_CIm, "double", "Konstante Imaginärteil"}, {PARAM_ItDepth, "int", "Iterationstiefe"}, {PARAM_ItBegin, "int","Anfangsiterationszahl"}, {PARAM_ItStep,"int","Iterationsschrittweite"}, {PARAM_xshift,"double","Verschiebung in Re-Richtung"}, {PARAM_yshift,"double","Verschiebung in Im-Richtung"}, {PARAM_xscale,"double","Zoomfaktor x-Aspekt"}, {PARAM_yscale,"double","Zoomfaktor y-Aspekt"}, {PARAM_Colors,"boolean","jeder zweite Schritt Schwarz"} }; Konstante C, benötigt C.Re und C.Im Iterationstiefe, ggf. Iterationsbeginn und Schrittweite Skalierungs- und Translationsfaktoren zum Verschieben der Zeichnung Farbenschalter: Farbverlauf oder alternierende Farben, ggf. Grundfarben
10 Klasse CNumber class CNumber // COMPLEX NUMBERS { public double Re; public double Im; CNumber () { this(0.0,0.0); } CNumber (double r, double i) { Re=r; Im=i; } public double Betrag() { return Math.sqrt(Re*Re+Im*Im); } public String toString(){ return (Re+"+"+Im+"i"); } }
11 public void paint(Graphics g) { double farbwechsel=0; for (int i=iteration; i<totalDepth;i+=itStep) { if (Cycle==true) { farbwechsel+=(255.0d*(1.0d/(totalDepth))); farbe =new Color((int)(farbwechsel),0,0); } else { if (i%2==0) { farbe=Color.black; } else { farbe=Color.red; } } g.setColor(farbe); showStatus("Iteration Nr."+i+ "; Colormode:"+Cycle); Julia (i,g); } Paint
12 Colormode : Schattiert oder zweifarbig ? schattierte Darstellung: mit jedem Iterationsschritt wird der R-Anteil der Zeichenfarbe um 1 / totalDepth erhöht Cycle-Darstellung: jeder zweite Iterations- schritt wird schwarz gemalt
13 Der Pixelspiel-Algorithmus public void Julia(int IterationDepth,Graphics g ) { if (C.Betrag()>2.0) Grenzbetrag=C.Betrag(); int iteration=0; for (int y=0;y<600;y++) { for (int x=0; x<600;x++) { CNumber z=new CNumber(); z.Re=(xscale*x)+xshift; z.Im=(yscale*y)+yshift; // z=QuadMap(Null); //Mandelbrot while ((z.Betrag()<Grenzbetrag)&&(iteration<IterationDepth)) { z=QuadMap(z); iteration++; } iteration=0; if (z.Betrag()<Grenzbetrag) g.fillRect(x,y,1,1); }
14 Erweiterung: die Mandelbrotmenge Betrachtung der Parameter, bzw. der verschiedenen Abbildungen, die eine Julia- Menge erzeugen. M ={C | Julia-Menge ist stetig für C} Startwert der Iteration wird als C gewählt und in die Abbildung mit übernommen Die Mandelbrotmenge ist eine Landkarte für stetige (zusammenhängende) Julia-Mengen
15
16
17