170 likes | 514 Views
Fraktale. Julia-Mengen die Mandelbrotmenge komplexe Abbildungen. realisiert als JAVA-Applet. Erinnerung: Komplexe Zahlen. z z 2 Beispiel 1: z=2+i. z z 2. Problem: Jede komplexe Zahl verhält sich unter der Abbildung z z 2 anders. Welche Zahlen liegen in einem bestimmten Radius ?
E N D
Fraktale • Julia-Mengen • die Mandelbrotmenge • komplexe Abbildungen realisiert als JAVA-Applet
Erinnerung: Komplexe Zahlen z z2 Beispiel 1: z=2+i
Problem: • Jede komplexe Zahl verhält sich unter der Abbildungz z2 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.
Idee des Mathematikers Julia um 1900: • 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)
Die Julia-Gefangenenpunktmenge für die Konstante C=-0.5 + 0.5i 18Iterationen 6 1 2 nach 0
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
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
Parameter • Konstante C, benötigt C.Re und C.Im • Iterationstiefe, ggf. Iterationsbeginn und Schrittweite • Skalierungs- und Translationsfaktoren zum Verschieben der Zeichnung • Farbenschalter: Farbverlauf oder alternierendeFarben, ggf. Grundfarben 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"} };
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"); } }
Paint 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); } }
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
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); } } }
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