Normalized Iteration count funktioniert nicht. Wo ist mien Denkfehler?

MusicIsLife

Mitglied
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:

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)
und
Java:
c.abs() <= Math.exp(2) (7.389)
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.
 

XHelp

Top Contributor
Wo hast du denn diese Formel her? Irgendwo 1zu1 übernommen, oder selber hingeschrieben? Die mathematische Formel die man dazu findet ist anders.
[edit]
Immer weider stelle ich fest: F5 vor dem Tippen ist eine gute Idee :(
[/edit]
 

XHelp

Top Contributor
Ich weiß nicht ob eine Seite, die den Worten
Welcome to my home page! There's a lot of stuff here, some quite good, and some that's so bad I'm ashamed of it.
beginnt, wirklich so eine gute Quelle ist. Der andere Link lässt sich bei mir nicht öffnen.
Probiere mal die Formeln aus Wikipedia (auch nicht Bombenquelle, aber immer hin...)
 

MusicIsLife

Mitglied
mit
Java:
float loc = 1 - Math.log(Math.log(c.abs())/Math.log(2));
sind nur werte ziwschen 2 und 6 möglich, mit
Java:
float loc = 1 - Math.log(Math.log(c.abs()/Math.log(2)));
zwischen 2 und 10. das ist noch am vielversprechendsden, aber auhc Werte größer als 10 kommen vor, es ist also auch cniht genug.
 

MusicIsLife

Mitglied
AHAAAAA:

Java:
float loc = 1 - Math.log10(Math.log10(c.abs()/Math.log10(2)));

damit sind werte zwischen 2 und etwas mehr als 1000 möglich. Das sollte reichen. Wunderbar
 

Ähnliche Java Themen

Neue Themen


Oben