Heim > Java > javaLernprogramm > Hauptteil

Wie bleibt die Farbbrillanz im Mandelbrot-Satz über verschiedene Zoomstufen hinweg erhalten?

Linda Hamilton
Freigeben: 2024-11-03 14:17:02
Original
292 Leute haben es durchsucht

How to Maintain Color Vibrancy in the Mandelbrot Set Across Different Zoom Levels?

Färben des Mandelbrot-Sets für eine große Auswahl an Zooms

Problem:
Die Standardmethode zum Färben des Mandelbrot-Sets mit maximalen Iterationen führt beim Verkleinern zu einem Mangel an Farben und beim Vergrößern zu einer Übersättigung der Farben. Die Herausforderung besteht darin, ein Farbschema zu erstellen, das eine breite Farbpalette über verschiedene Zoomstufen hinweg beibehält.

Lösung:

1. Histogrammbasierte Farbzuordnung:

  • Verwenden Sie ein Histogramm, um Farbverläufe effektiver zu verteilen, anstatt Farben für ungenutzte Indizes zu verschwenden.
  • Verwenden Sie eine optisch ansprechende Verlaufsfunktion, wie z die RGB-Werte des sichtbaren Spektrums.

2. Anzahl der gebrochenen Iterationen (Mandelbrot-Escape):

  • Berechnen Sie Iterationen mit Gleitkommagenauigkeit, um gebrochene Escape-Werte zu erhalten.
  • Verwenden Sie diese gebrochenen Werte, um die Farbe aus einem benutzerdefinierten Farbverlauf zu berechnen Funktion, die eine breite Palette von Farben bereitstellen soll.

Zusätzliche Verbesserungen:

  • Multi-Pass-Neufärbung: Führen Sie mehrere Durchgänge durch, um sanfte und kontinuierliche Übergänge zwischen Farbverläufen zu erzielen.
  • Anpassbare Iterationsanzahl: Ermöglicht dem Benutzer, die maximale Iterationsanzahl anzupassen, was sich auf den Detaillierungsgrad und die Farbverteilung auswirkt.
  • Dynamischer Zoom: Implementieren Sie dynamische Zoomfunktionen, um die Mandelbrot-Menge in verschiedenen Maßstäben zu erkunden und die Farbbrillanz durchgehend zu bewahren.

Beispielimplementierung:

// Vertex Shader
layout(location = 0) in vec2 pos;
out vec2 p;
void main()
{
    p = pos;
    gl_Position = vec4(pos, 0.0, 1.0);
}

// Fragment Shader
uniform vec2 p0;
uniform float zoom;
uniform int n;
uniform int sh;
uniform int multipass;
in vec2 p;
out vec4 col;

// Compute fractional iteration count
float mu = m + frac = n + 1 - log(log(sqrt(xx + yy)) / log(2.0));
mu *= float(1 << sh);
int i = int(mu);

// Multi-pass coloring
if (multipass != 0)
{
    // Quantize color based on iterations
    float r = (i >> 0) & 255; r /= 255.0;
    float g = (i >> 8) & 255; g /= 255.0;
    float b = (i >> 16) & 255; b /= 255.0;
    col = vec4(r, g, b, 255);
}
// Visible spectrum color gradient
else
{
    float q = float(i) / float(N);
    q = pow(q, 0.2);
    col = vec4(spectral_color(400.0 + (300.0 * q)), 1.0);
}
Nach dem Login kopieren

Ergebnis:

Dieser Ansatz kombiniert histogrammbasierte Farbgebung, fraktionierte Iterationszählung und Neufärbung in mehreren Durchgängen, um eine lebendige und farbreiche Darstellung der zu erreichen Mandelbrot-Set auf allen Zoomstufen.

Das obige ist der detaillierte Inhalt vonWie bleibt die Farbbrillanz im Mandelbrot-Satz über verschiedene Zoomstufen hinweg erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage