Wie man unschwer am Titiel erkennen kann, beschäftige ich mcih mit der Programmierung von Fraktalen: Julia und Mandelbrotmengen. Jeder, der sich mit Fraktalen auseinandersetzt, kommt irgendwann an den Punkt, wo er sich sagt, dass ihn die "Streifen", die beim Einfärben enstehen, stören. Als Alternative zu dem simplen einfärben (abhängig von der Anzahl der Iterationen, die es braucht, bis z. B. der Mandelbrot-Algorithmus die Abbruchbedingung erfüllt (c.abs() > 2), eine Farbe wählen) findet man unweigerlich eine ominöse Formel, die als "Normalized Iteration Count" bezeichnet wird. Ich habe diese nun folgendermaßen implementiert:
Jeder im Internet scheint mit diesem Algorithmus glücklich zu sein und wundervolle Ergebnisse produzieren zu können. Jeder, ausser mir. Ich habe ein paar Berechnungen angestellt und bin zu dem Shcluss gekommen, dass dieser ALgorithmus nur für Werte von
und
funktioniert.
Allerdings ist die Abbruchbedingung für der Iteration z(n) = (z(n-1))^2 + c, dass der Betrag der Kompelxen Zahl c.abs() größer wird als 2. Ist dies der Fall, wird dei Komplexe Zahl an die Funktion zur Bestimmung der Farbe weitergegeben. 2 ist bekannterweise allerdings kleiner als 2.718, was dazu führt, dass die Funktion einen Wert größer als 1 zurückliefert. Ist c.abs() größer als 7.389, wird loc negativ. Da loc aber nur zwischen 0 und 1 liegen darf, habe ich ein Problem.
Falls einer eine Idee hat, was ich falsch mache: bitte melden, ich bin echt verzweifelt.
Danke.
Java:
float loc = (float) 1 - Math.log(Math.log(c.abs())) / Math.log(2);
Jeder im Internet scheint mit diesem Algorithmus glücklich zu sein und wundervolle Ergebnisse produzieren zu können. Jeder, ausser mir. Ich habe ein paar Berechnungen angestellt und bin zu dem Shcluss gekommen, dass dieser ALgorithmus nur für Werte von
Java:
c.abs() >= Math.E (2.178)
Java:
c.abs() <= Math.exp(2) (7.389)
Allerdings ist die Abbruchbedingung für der Iteration z(n) = (z(n-1))^2 + c, dass der Betrag der Kompelxen Zahl c.abs() größer wird als 2. Ist dies der Fall, wird dei Komplexe Zahl an die Funktion zur Bestimmung der Farbe weitergegeben. 2 ist bekannterweise allerdings kleiner als 2.718, was dazu führt, dass die Funktion einen Wert größer als 1 zurückliefert. Ist c.abs() größer als 7.389, wird loc negativ. Da loc aber nur zwischen 0 und 1 liegen darf, habe ich ein Problem.
Falls einer eine Idee hat, was ich falsch mache: bitte melden, ich bin echt verzweifelt.
Danke.