Chaos Game: Iterated Function System (IFS) 2
In den nächsten Beispielen behandeln wir, wie am Ende des letzten Kapitels, fast ausschließlich Dichte-Bilder.
Leider ist es nicht einfach zu einem Bild ein passendes erzeugendes IFS zu finden. Konkretes Beispiel: Wie kann
man mit IFSs einen Baum zeichnen? Schauen wir uns einige Beispiele an:
Baum IFS
Man benötigt sieben Parameter: a, b, c, d, e, f und
wkt für jede affine Abbildung.
wkt ist hierbei die Wahrscheinlichkeit,
mit der die zugehörige affine Abbildung gewählt wird. (Auf die Farbe kann man verzichten,
wenn man ein Dichte-Bild erzeugen will.)
Wir verwenden hierzu eine Tabelle, deren Struktur für alle folgenden Beispiele übernommen werden kann:
| a
| b
| c
| d
| e
| f
| wkt
|
| a[1]=0.05 |
b[1]=0 |
c[1]=0 |
d[1]=0.6 |
e[1]=0 |
f[1]=0 |
wkt[1]=0.28 |
| a[2]=0.05 |
b[2]=0 |
c[2]=0 |
d[2]=−0.5 |
e[2]=0 |
f[2]=1 |
wkt[2]=0.28 |
| a[3]=0.46 |
b[3]=−0.32 |
c[3]=0.39 |
d[3]=0.38 |
e[3]=0 |
f[3]=0.6 |
wkt[3]=0.2 |
| a[4]=0.47 |
b[4]=−0.15 |
c[4]=0.17 |
d[4]=0.42 |
e[4]=0 |
f[4]=1.1 |
wkt[4]=0.02 |
| a[5]=0.43 |
b[5]=0.28 |
c[5]=−0.26 |
d[5]=0.45 |
e[5]=0 |
f[5]=1 |
wkt[5]=0.2 |
| a[6]=0.42 |
b[6]=0.26 |
c[6]=−0.35 |
d[6]=0.31 |
e[6]=0 |
f[6]=0.7 |
wkt[6]=0.02 |
Danach kann man den fogenden Code für alle anderen Beispiele verwenden. Nur die Anzahl der Aufrufe der
Methode
addTransform und der Wert der Parameter kann variieren.
ifs2 = new IFS("Baum");
ifs2.addTransform(a[1], b[1], c[1], d[1], e[1], f[1], wkt[1], 1);
ifs2.addTransform(a[2], b[2], c[2], d[2], e[2], f[2], wkt[2], 2);
ifs2.addTransform(a[3], b[3], c[3], d[3], e[3], f[3], wkt[3], 3);
ifs2.addTransform(a[4], b[4], c[4], d[4], e[4], f[4], wkt[4], 4);
ifs2.addTransform(a[5], b[5], c[5], d[5], e[5], f[5], wkt[5], 5);
ifs2.addTransform(a[6], b[6], c[6], d[6], e[6], f[6], wkt[6], 6);
Mit diesen Werten und 100 Millionen Iterationsschritten bekommt man bei geeigneter Farbtafel dieses Bild:
Wenn man alle Parameter zufällig wählt, erhält man höchst selten ein attrakives Bild. Besser ist es, wenn man
bei den aktuellen Werten nur wenige dem Zufall überlässt. So zum Beispiel alle b und c Parameter.
In diesem Fall kann man, trotz der zufälligen Wahl aller b- und c-Parameter, noch Elemente des vorherigen Bildes
erkennen.
Blatt IFS
Zur Erzeugung eines "Blatt-IFS" benötigt man nur vier affine Abbildungen. Mit diesen Werten sollte es klappen:
| a
| b
| c
| d
| e
| f
| wkt
|
| a[1]=0.14 |
b[1]= 0.01 |
c[1]=0 |
d[1]=0.51 |
e[1]=−0.08 |
f[1]=−1.31 |
wkt[1]=0.25 |
| a[2]=0.43 |
b[2]=0.52 |
c[2]=−0.45 |
d[2]=0.5 |
e[2]=1.49 |
f[2]=−0.75 |
wkt[2]=0.25 |
| a[3]=0.45 |
b[3]=−0.49 |
c[3]=0.47 |
d[3]=0.47 |
e[3]=−1.62 |
f[3]=−0.74 |
wkt[3]=0.25 |
| a[4]=0.49 |
b[4]=0 |
c[4]=0 |
d[4]=0.51 |
e[4]=0.02 |
f[4]=1.62 |
wkt[4]=0.25 |
Da die Anzahl der Treffer pro Pixel stark variiert, sollte man, wie beim vorherigen Beispiel auch, den Logarithmus
der Trefferanzahl verwenden. Hier ist der Farbverlauf sehr einfach gehalten. Es werden im Wesentlichen Grün- und Brauntöne
verwendet.
Auch hier bringt eine sparsam genutzte Zufallswahl einiger Parameter, verblüffende Bilder hervor:
Gras IFS
Ein grasähnliches Bild erreicht man mit diesen Parametern:
| a
| b
| c
| d
| e
| f
| wkt
|
| a[1]=0 |
b[1]=0.2439 |
c[1]=0 |
d[1]=0 |
e[1]=0 |
f[1]=0 |
wkt[1]=0.25 |
| a[2]=0.7248 |
b[2]=0.0337 |
c[2]=−0.0253 |
d[2]=0.7426 |
e[2]=0.206 |
f[2]=0.2538 |
wkt[2]=0.25 |
| a[3]=0.1583 |
b[3]=−0.1297 |
c[3]=0.355 |
d[3]=0.3676 |
e[3]=0.1383 |
f[3]=0.175 |
wkt[3]=0.25 |
| a[4]=0.3386 |
b[4]=0.3694 |
c[4]=0.2227 |
d[4]=−0.0756 |
e[4]=0.0679 |
f[4]=0.0826 |
wkt[4]=0.25 |
Viele Millionen Iterationschritte (wenige Sekunden für den PC!) bringen dieses Bild zum Vorschein:
Ändert man noch weniger Parameter als im letzten Beispiel, dann bekommt man ein anderes distelähnliches Gebilde.
Spiralen IFS
Wer die Parameter in bestimmten Grenzen zufällig wählt, bekommt als Ergebnis meist ein mehr oder weniger großes Chaos-Bild.
Mitunter aber erscheint plötzlich eine etwas interessantere Form. Ein Bild mit vielen Spiralen erscheint, wenn
man diese Parameter wählt:
| a
| b
| c
| d
| e
| f
| wkt
|
| a[1]=0.7868 |
b[1]=−0.4237 |
c[1]=0.2431 |
d[1]=0.8602 |
e[1]=1.7658 |
f[1]=1.4103 |
wkt[1]=0.9 |
| a[2]=− 0.1220 |
b[2]=0.0337 |
c[2]=0.1508 |
d[2]=0.5310 |
e[2]=−6.7195 |
f[2]=0.3822 |
wkt[2]=0.05 |
| a[3]=0.1827 |
b[3]=−0.1372 |
c[3]=0.0901 |
d[3]=0.1791 |
e[3]=6.0877 |
f[3]=1.5693 |
wkt[3]=0.05 |
Vielleicht ist Ihnen aufgefallen, dass e[2] und e[3] betragsmäßig deutlich größer als 1 sind. Und oberhalb von 1
besteht grundsätzlich die Gefahr, dass die Folgenelemente divergieren. Erst recht natürlich bei Beträgen größer 6.
Damit überhaupt eine Chance auf einen Attraktor besteht,
darf die Wahrscheinlichkeit für diese beiden affinen Abbildungen nur mit einer sehr
kleinen Wahrscheinlichkeit ausgewählt werden. Eine Garantie für Beschränktheit hat man dennoch nicht. So wird es immer
wieder vorkommen, dass nur einige wenige Punkte zu sehen sein werden.
Mit den obigen Einstellungen aber funktioniert die Sache aber. Das Ergebnis so aus:
Für das Bild unten wurden nur einige b- und c-Parameter leicht verändert. Und schon sieht das Ergebnis aus, wie
ein Lebewesen aus der Tiefsee.
Es lohnt sich offensichtlich, bei interessanten Bildergebnissen, nur kleine Parameteränderungen vorzunehmen.
Es ist fast sicher, dass das Ergebnis noch niemand zuvor gesehen hat ;-)
Drachen IFS
Als letztes Beispiel behandeln wir diese urtümliche Fabelwesen:
Mit einiger Phantasie kann man einen Drachen erkennen. Hier sind die Parameter:
| a
| b
| c
| d
| e
| f
| wkt
|
| a[1]=0.8240 |
b[1]=0.2814 |
c[1]=−0.2123 |
d[1]=−0.8642 |
e[1]=−1.8823 |
f[1]=−0.1106 |
wkt[1]=0.8 |
| a[2]=0.0883 |
b[2]=0.5210 |
c[2]=−0.4639 |
d[2]=−0.3778 |
e[2]=0.7845 |
f[2]=8.0958 |
wkt[2]=0.2 |
Kleine Änderungen in den Parametern b und c bringen dieses Bild zum Vorschein:
Sketch IFSBaumDichte
Sketch IFSBlattDichte
Sketch IFSGrasDichte
Sketch IFSSpiralenDichte
Sketch IFSDracheDichte
Menu