StefanBion.de

Dem Stefan sein kunterbuntes Web-Sammelsurium

Experimente zur Einfärbung des Inneren

Meistens wird das Innere des „Apfels“, also die „im Kreis gefangenen“ Punkte C auf der Gaußschen Zahlenebene, mit einer einheitlichen Farbe dargestellt, z.B. Schwarz. – Geht das auch anders?

Wie man aber bei der Veranschaulichung der Mandelbrot-Iteration Z→Z²+C sehr schön erkennt, tut sich eine ganze Menge, bis feststeht, ob die komplexe Zahl Z zur Mandelbrot-Menge gehört oder nicht: Die Zahl Z "hüpft" während der Iteration auf der Gaußschen Zahlenebene wie wild umher – das müsste sich doch irgendwie zur Einfärbung nutzen lassen...

Beim "Sprungverhalten" der Zahl Z während der Iterationen fällt auf, dass es hierbei – abhängig von der Position der Startzahl C – unterschiedliche "Hauptmuster" gibt: Spiralen, Zyklen und chaotische Sprünge:

Spiralen
Zyklen
Chaos

Spiralen, die immer enger werden und auf ein Zentrum zusteuern, gibt es im "Hauptapfel". In den "Nebenäpfeln" gibt es Zyklen, also eine begrenzte Anzahl von Punkten, zwischen denen die Zahl Z immer wieder wechselt. Chaotische Sprünge treten naturgemäß außerhalb der Mandelbrot-Menge auf und enden früher oder später in Divergenz, also in der Unendlichkeit. In den Randbereichen gibt es auch "Mischungen" zwischen diesen Mustern, also z.B. "Chaotische Spiralen" oder "Chaotische Zyklen".

Zyklenzahl

Vielleicht lässt sich ja die Anzahl der unterschiedlichen Positionen auf der Gaußschen Zahlenebene, die die Zahl Z während der Iterationen ansteuert, zur Einfärbung nutzen. Bei manchen Zyklen gibt es nur wenige Positionen, zwischen denen die Zahl Z abwechselnd hin- und herspringt, bei anderen mehr. Programmtechnisch ist das relativ einfach umzusetzen: Man muss nur während der Iterationen die Werte der Zahl Z in ein Hash bzw. ein assoziatives Array schreiben, so dass Duplikate unterbunden werden. Nach dem Ende der Iterationsschleife zählt man dann die Einträge in diesen Array und hat die Zahl der unterschiedlichen Positionen der Zahl Z. In der Praxis ist das in JavaScript leider alles andere als schnell, da Arrays in JavaScript leider sehr unperformant sind. Dennoch habe ich es einmal kurz ausprobiert:

Zur Einfärbung wurde hier eine "Regenbogenfarben-Palatte" benutzt (Rot-Gelb-Grün-Cyan-Blau-Violett-Rot). Wie man an dem Frabverlauf sieht, ist die Anzahl der unterschiedlichen Z-Positionen in der Mitte der "Bommel" am kleinsten (Rot) und wird zum Rand hin größer (Blau-Violett). Aufschlussreich, aber nicht wirklich hübsch...

Winkel

Man könnte vielleicht auch den Winkel zwischen der Zahl Z und der Startzahl C nach einer bestimmten Anzahl von Iterationen ermitteln und den Wert dann einer Farbe zuordnen.

Ermittlung des Winkels zwischen Z und C

Dies geht mit der erweiterten Arcus-Tangens-Funktion von JavaScript ganz einfach:

// Winkel von Z gegenüber C ermitteln
var alpha = Math.atan2(b - y, a - x);
if(alpha < 0) alpha += 2 * Math.PI;

// Winkel in Wert von 1...itMax-1 umwandeln
it = Math.floor((itMax - 1) * alpha / Math.PI / 2) + 1;

Diese Zeilen kommen ans Ende der Funktion Iterate() vor dem "return it;"

Hier zunächst ein Gesamtbild des »Apfelmännchen«:

Das "Innere des Apfels" wird abhängig vom Winkel zwischen Z und C eingefärbt.

Wie man sieht, werden durch die Einfärbung des Winkels die "Höhenlinien" als solches sichtbar. Da sich die Position von Z und somit der Winkel mit jeder Iteration ändert (außer im "Hauptapfel"), ändern sich auch die Farbverläufe, wenn man einen anderen Wert für die Maximalzahl der Iterationen wählt.

Auch bei stärkerem Hineinzoomen in die Randbereiche der Mandelbrot-Menge enthalten die "Höhenlinien" nun hübsche Farbverläufe:

Auch die "Höhenlinien" in den Randbereichen der Mandelbrot-Menge erhalten interessante Farbeffekte.

BilderSoftware

Fraktalgrafik

Quelle: