3 votos

Colorear conjuntos Julia utilizando la estimación de la distancia relativa a la profundidad del zoom

Utilizando el algoritmo de coloración de estimación de distancia aprendido de aquí pude colorear Conjuntos de Julia proyectados sobre una esfera de Riemann, como con este vídeo. Sin embargo, una vez que empecé a mostrar matrices polinómicas de los Conjuntos de Julia Al utilizar este algoritmo de coloreado se obtienen resultados incoherentes, como se muestra en la primera imagen. Ciertas partes son más claras que otras, y esto se debe a que el apareamiento polinómico saca a la luz partes más profundas del fractal sin ampliar Por eso, al utilizar el mismo ajuste de distancia, las partes ampliadas quedan más "borrosas" que el resto.

Por lo tanto, lo que creo que necesito es algún tipo de algoritmo para detectar cómo "zoom" estoy en el conjunto de Julia, así que puedo ajustar la distancia en consecuencia. Intenté basarme en el número de iteraciones que tarda la órbita en escapar (cuanto más profundo, más iteraciones tarda la órbita en escapar), pero no conseguí el efecto deseado (segunda imagen de abajo - algunas partes son apenas visibles). Aquí está mi código para la coloración:

for (iter = currentMatingIteration + 1; iter < maxIterations && (w.x * w.x + w.y * w.y < bailout*bailout); iter++)
{
    d2 *= 4.0 * w2;

    // Julia Set algorithm
    w = c_2(w) + c;

    w2 = w.x * w.x + w.y * w.y;

    // Distance checker
    if(w2 > maxDist)
        break;
}

float fineness = 7;     // the higher, the less "blurry"
//float fineness = 15;  // this is used for the second picture below

float d = sqrt(w2 / d2) * log(w2);  // this is the distance estimation
float dist = clamp(sqrt(d * pow(fineness, 2)), 0, 1);   // this is the adjustments I make for coloring

//float dist = clamp(sqrt(d * pow(fineness * (float(iter) / maxIterations), 2)), 0, 1);     // This is my attempt to solve this problem, used in the second picture below

Mi proyecto es aquí para las pruebas.

enter image description here enter image description here

Edita:

Si bien esto probablemente no es una solución general para averiguar cómo profundamente zoom uno es, lo que funcionó para este problema es el cálculo de la derivada durante el pull-back parte del algoritmo de apareamiento, y el uso de ese como el valor inicial para el cálculo de la estimación de la distancia para cada Julia Set (gracias a Claude en los comentarios). El resultado es el siguiente:

enter image description here enter image description here

Ajuste de la esfera de Riemann

Sin ajuste: enter image description here

Con ajuste: enter image description here

1voto

Claude Puntos 188

El punto clave a la hora de generar imágenes con estimación de distancia es basar las derivadas en relación con la escala correcta. Para una imagen típica 2D del conjunto de Julia o del conjunto de Mandelbrot se toman derivadas relativas al espaciado entre píxeles (en realidad, teniendo en cuenta la transformación de las coordenadas de los píxeles al plano complejo al calcular las derivadas con la regla de la cadena).

Las imágenes no tienen por qué tener una cartografía lineal simple a partir de píxeles, por ejemplo sus proyecciones de la esfera de Riemann en 3D. Probablemente haya alguna necesidad de tener en cuenta la proyección estereográfica, pero quizá la distorsión no sea demasiado grande para la región cercana a 0. Lo ideal sería que las derivadas (y, por tanto, las estimaciones de distancia) se escalaran en relación con la distancia superficial en la superficie de la esfera en 3D.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X