fraktale
Post on 01-Feb-2016
44 Views
Preview:
DESCRIPTION
TRANSCRIPT
1www.tfh-berlin.de/~s680132 StefanAdolf@tfh-berlin.de
Fraktale Julia-Mengen
die Mandelbrotmenge
komplexe Abbildungen
realisiert als JAVA-Applet
2www.tfh-berlin.de/~s680132 StefanAdolf@tfh-berlin.de
z z2
Beispiel 1: z=2+iz=2+i
Erinnerung: Komplexe Zahlen
3www.tfh-berlin.de/~s680132 StefanAdolf@tfh-berlin.de
z z2
4www.tfh-berlin.de/~s680132 StefanAdolf@tfh-berlin.de
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 StefanAdolf@tfh-berlin.de
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 StefanAdolf@tfh-berlin.de
Die Julia-Gefangenenpunktmenge für die Konstante C=-0.5 + 0.5i
nach 0 1 2 18 Iterationen6
7www.tfh-berlin.de/~s680132 StefanAdolf@tfh-berlin.de
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 StefanAdolf@tfh-berlin.de
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 StefanAdolf@tfh-berlin.de
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 StefanAdolf@tfh-berlin.de
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 StefanAdolf@tfh-berlin.de
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 StefanAdolf@tfh-berlin.de
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 StefanAdolf@tfh-berlin.de
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 StefanAdolf@tfh-berlin.de
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 StefanAdolf@tfh-berlin.de
16www.tfh-berlin.de/~s680132 StefanAdolf@tfh-berlin.de
17www.tfh-berlin.de/~s680132 StefanAdolf@tfh-berlin.de
top related