Glattes Spektrum für Mandelbrot-Set-Rendering
Schreibe ich momentan ein Programm zum generieren wirklich enorm (65536x65536 Pixel und oben), Mandelbrot-Bildern, und ich würde gerne erarbeiten ein Spektrum und Farbschema, das tut Ihnen Gerechtigkeit. Die wikipedia vorgestellten mandelbrot-Bild scheint ein hervorragendes Beispiel, vor allem, wie die abwechslungsreiche Farbpalette bleibt in allen zoom-Stufen der Sequenz. Ich bin mir nicht sicher, ob es das drehen der palette oder tun einige andere trick, um dies zu erreichen, obwohl.
Ich bin vertraut mit der glatt coloring-Algorithmus für die mandelbrot-Menge, so kann ich vermeiden, Streifenbildung, aber ich brauche immer noch einen Weg, um die Farben zur Ausgabe von Werten aus diesen Algorithmus.
Die Bilder, die ich bin, zu generieren, sind pyramidal (z.B. eine Serie von Bildern, von denen jedes die Hälfte der Abmessungen des vorigen), so kann ich mit einem rotierenden palette der einige Sortieren, solange die änderung in der palette zwischen nachfolgenden zoom-Stufen nicht zu offensichtlich.
InformationsquelleAutor der Frage Nick Johnson | 2008-12-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist die Farbe glätten Algorithmus:
Können sagen, Sie beginnen mit der komplexen Zahl
z0
und Durchlaufenn
mal, bis es entweicht. Lassen Sie den end-Punkt werdenzn
.Einen glatten Wert wäre
Funktioniert dies nur für mandelbrot, wenn Sie wollen, um zu berechnen, für eine reibungslose Funktion für julia-Mengen, dann verwenden Sie
Dann
smoothcolor
im Intervall(0,max_iter)
.Teilen
smoothcolor
mitmax_iter
um einen Wert zwischen 0 und 1.Bis eine gleichmäßige Farbe aus dem Wert:
Diese können aufgerufen werden, zum Beispiel (in Java):
da der erste Wert in der HSB-Farbe-Parameter wird verwendet, um zu definieren die Farbe aus dem Farbkreis.
InformationsquelleAutor der Antwort Per Alexandersson
Verwenden Sie die glatte Färbung Algorithmus zur Berechnung der Werte innerhalb des Viewports, dann ordnen Sie Ihre palette vom niedrigsten zum höchsten Wert. So, wie Sie zoom in und die höheren Werte sind nicht mehr sichtbar, ist die palette wird so skaliert, wie gut. Mit der gleichen Konstanten für n und B Sie werden am Ende mit einem Bereich von 0.0 bis 1.0, die für eine vollständig heraus gezoomt gesetzt, sondern auf tieferen vergrößert den Dynamikbereich verkleinern, zu sagen, 0,0 bis 0,1 bei 200% zoom, 0.0 0.0001 bei 20000% zoom, etc.
InformationsquelleAutor der Antwort Sparr
Hier ist eine typische innere Schleife für eine naive Mandelbrot-generator. Um eine glatte Farbe, die Sie wollen, passieren in der realen und komplexen "Längen" und die iteration, die Sie gerettet. Ich habe die Mandelbrot-code, so dass Sie sehen können, welche vars zu verwenden, um zu berechnen, ist die Farbe.
und MapColor unter: (siehe diesem link, um sich die ColorFromHSV Funktion)
MapColour ist "glätten" die Rettung der Werte von 0 bis 1, die dann verwendet werden können, um der Karte eine Farbe, ohne schreckliche banding. Spielen mit MapColour und/oder der hsv-Funktion können Sie ändern, welche Farben verwendet werden.
InformationsquelleAutor der Antwort Alex Russell
Scheint einfach zu tun durch Versuch und Irrtum. Angenommen, Sie definieren können, auch HSV1 und HSV2 (Farbton, Sättigung, Wert) des endpoint-Farben, die Sie verwenden möchten, (schwarz und weiß; blau und gelb; dunkel-rot und grün; etc.), und angenommen, Sie haben ein Algorithmus zum zuweisen eines P-Wert zwischen 0.0 und 1.0, die auf jedem Ihrer Pixel. Dann, dass die pixel die Farbe wird
Damit fertig, nur die Ergebnisse zu beobachten und zu sehen, wie Sie möchten. Wenn der Algorithmus zum zuweisen von P stetig ist, dann ist die Steigung sollte glatt sein, wie gut.
InformationsquelleAutor der Antwort Paul Brinkley
Meine letztendliche Lösung war eine gut aussehende (und ziemlich großen) palette und speichern Sie es als ein Konstanten-array in der Quelle, dann eine Interpolation zwischen den Indizes in es mit die smooth coloring-Algorithmus. Die palette umschließt (und ist so konzipiert, kontinuierliche), aber das scheint keine Rolle, viel.
InformationsquelleAutor der Antwort Nick Johnson
hier finden Sie eine version mit javascript
Verwendung :
Funktion
InformationsquelleAutor der Antwort