> Java > java지도 시간 > 다양한 확대/축소 수준에서 Mandelbrot 세트의 색상 선명도를 유지하는 방법은 무엇입니까?

다양한 확대/축소 수준에서 Mandelbrot 세트의 색상 선명도를 유지하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-03 14:17:02
원래의
338명이 탐색했습니다.

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

다양한 확대/축소를 위해 만델브로 집합 색칠하기

문제:
최대 반복을 사용하여 만델브로 집합을 색칠하는 표준 방법 축소하면 색상이 부족하고 확대하면 색상이 과포화됩니다. 문제는 다양한 확대/축소 수준에서 다양한 색상을 유지하는 색상 구성표를 만드는 것입니다.

해결책:

1. 히스토그램 기반 색상 매핑:

  • 사용하지 않는 인덱스에 색상을 낭비하는 대신 히스토그램을 사용하여 색상 그라데이션을 보다 효과적으로 배포합니다.
  • 다음과 같이 시각적으로 만족스러운 그라데이션 기능을 사용합니다. 가시광선의 RGB 값

2. 분수 반복 횟수(만델브로 이스케이프):

  • 부동 소수점 정밀도로 반복을 계산하여 분수 이스케이프 값을 얻습니다.
  • 이러한 분수 값을 사용하여 사용자 정의 그라데이션에서 색상을 계산합니다. 다양한 색상을 제공하도록 설계된 기능입니다.

추가 개선 사항:

  • 멀티 패스 다시 칠하기: 색상 그라디언트 간의 부드럽고 연속적인 전환을 달성하려면 여러 패스를 수행하십시오.
  • 조정 가능한 반복 횟수: 사용자가 최대 반복 횟수를 조정하여 세부 수준과 색상 분포에 영향을 미칠 수 있습니다.
  • 동적 확대/축소: 동적 확대/축소 기능을 구현하여 만델브로 집합을 다양한 규모로 탐색하고 전체적으로 색상 선명도를 유지합니다.

구현 예:

// 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);
}
로그인 후 복사

결과:

이 접근 방식은 히스토그램 기반 색상 지정, 분수 반복 횟수 및 다중 패스 다시 색상 지정을 결합하여 생생하고 색상이 풍부한 표현을 얻습니다. Mandelbrot는 모든 확대/축소 수준에서 설정됩니다.

위 내용은 다양한 확대/축소 수준에서 Mandelbrot 세트의 색상 선명도를 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿