Fraktale
description
Transcript of Fraktale
1www.tfh-berlin.de/~s680132 [email protected]
Fraktale Julia-Mengen
die Mandelbrotmenge
komplexe Abbildungen
realisiert als JAVA-Applet
2www.tfh-berlin.de/~s680132 [email protected]
z z2
Beispiel 1: z=2+iz=2+i
Erinnerung: Komplexe Zahlen
3www.tfh-berlin.de/~s680132 [email protected]
z z2
4www.tfh-berlin.de/~s680132 [email protected]
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.
5www.tfh-berlin.de/~s680132 [email protected]
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:
6www.tfh-berlin.de/~s680132 [email protected]
Die Julia-Gefangenenpunktmenge für die Konstante C=-0.5 + 0.5i
nach 0 1 2 18 Iterationen6
7www.tfh-berlin.de/~s680132 [email protected]
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
8www.tfh-berlin.de/~s680132 [email protected]
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
9www.tfh-berlin.de/~s680132 [email protected]
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 alternierendeFarben, ggf. Grundfarben
10www.tfh-berlin.de/~s680132 [email protected]
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"); }}
11www.tfh-berlin.de/~s680132 [email protected]
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
12www.tfh-berlin.de/~s680132 [email protected]
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
13www.tfh-berlin.de/~s680132 [email protected]
Der Pixelspiel-Algorithmuspublic 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); //Mandelbrotwhile
((z.Betrag()<Grenzbetrag)&&(iteration<IterationDepth)){
z=QuadMap(z);iteration++;
}iteration=0;if (z.Betrag()<Grenzbetrag)
g.fillRect(x,y,1,1);
}}
}
14www.tfh-berlin.de/~s680132 [email protected]
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
15www.tfh-berlin.de/~s680132 [email protected]
16www.tfh-berlin.de/~s680132 [email protected]
17www.tfh-berlin.de/~s680132 [email protected]