¿Cómo se grafica el conjunto de Mandelbrot?

Para cada punto C en el plano complejo dentro de los límites de la pantalla, aplique la ecuación:

Z ‘= Z ^ 2 + C

para una gran cantidad de iteraciones. Donde Z y C son números complejos; C es una constante que depende de qué punto del plano complejo está evaluando, y el valor de Z comienza en 0 y cambia cada iteración.

Si el valor de Z se dirige hacia el infinito, ese punto no está en el conjunto de Mandelbrot, de lo contrario lo está. Los puntos fuera del conjunto se colorean según la rapidez con la que escapan.

Una manera simple de imaginar esto es pensar solo en números reales. Toma todos los números en la recta numérica y sigue cuadrándolos. Los números menores que -1.0 o mayores que 1.0 escaparán al infinito, los números -1.0 y 1.0 terminarán exactamente en 1.0, y los números entre -1.0 y 1.0 terminarán en cero (en el conjunto).

Los números complejos tienen 2 componentes y se comportan de manera un poco diferente con la multiplicación, por lo que el resultado es una forma fractal muy interesante.

Este video puede ayudar:

Elija un punto, cualquier punto y … bueno, apúntelo con un vector.

Recuerda donde estaba.
No voy a dibujar a escala aquí, sino que tomo el vector que tenía, duplique su ángulo y cuadre su longitud. Agregue el que comenzó al resultado.

Hazlo de nuevo, dobla el ángulo, cuadra la longitud y agrega el punto de partida.

…y otra vez…

A medida que continuamos haciendo esto, los resultados trazan una especie de espiral ligeramente doblada:

Aquí hay una pequeña lucha de poder, con cero e infinito tirando de nuestra espiral, ya que estamos cuadrando la longitud, las distancias más pequeñas que 1 saldrán más cortas que en el paso anterior y tirarán hacia el origen, mientras que las distancias más de 1 tienden a crecer hacia el infinito. Sin ninguna otra ceremonia, eso crearía una línea límite en el círculo del radio 1, donde los puntos internos pertenecen al origen y los puntos externos viajan al infinito y más allá.

Como seguimos agregando el punto de partida a cada paso, no es tan fácil predecir exactamente dónde terminará el proceso. Incluso si estamos momentáneamente dentro del círculo de la unidad, agregar el punto de partida puede llevarnos afuera, o puede traer un punto distante de regreso al interior, y quién sabe qué pasará después.

El conjunto de Mandelbrot consta de los puntos de partida que producen espirales en el origen cuando aplica este proceso a ellos. Dado que es difícil saber qué puntos lo hacen sin intentarlo, es mejor hacer que una computadora haga todos los cálculos. Usemos el lenguaje de programación Python para eso, tiene una notación ordenada para números complejos, y nuestro proceso pivot-stretch-and-add se simplifica al siguiente z = z * z + c cuando lo escribe con números complejos.

Primero, necesitaremos una sección 2D del avión, lo haré 640 por 480 puntos porque soy sentimental con respecto a las resoluciones de imagen:

  matemáticas de importación
 ancho = 640
 altura = 480
 imagen = [[[255 para c en rango (3)] para x en rango (ancho) para y en rango (altura)]

Luego, tenemos que lidiar con el hecho de que las coordenadas de la imagen son enteros, pero nuestros puntos interesantes se encuentran cerca del origen. Revisando la altura y el ancho de la imagen, traduzca las coordenadas y y x en números de coma flotante entre más y menos 1.25, y centre las coordenadas x ligeramente a la izquierda, porque la mitad derecha del avión no contiene mucho Mandelbrot fascinante acción:

  para y en rango (altura):
	 imag = (y- (altura / 2)) / flotante (altura) * 2.5
	 para x en rango (ancho):
		 real = ((x- (ancho / 2)) / flotante (ancho) * 2.5) -0.5

Luego, necesitamos insertar el proceso de prueba para cada punto. He impuesto los límites arbitrarios que estamos satisfechos después de un máximo de 255 pasos (porque el formato de imagen proporciona 255 intensidades de color para diferenciar puntos), y esos puntos más allá de una distancia de 2.5 cuentan como perdidos hasta el infinito.

  z = complejo (real, imag)
		 c = z
		 para i en rango (255):
			 z = z * z + c
			 if (abs (z)> 2.5):
				 imagen [y] [x] = [i, i, i]
				 descanso

La parte final es simplemente volcar el gráfico resultante en un archivo de imagen, que estará en formato PPM (de nuevo, porque es fácil).
Aquí está todo el programa en una sola pieza, por completo:

  matemáticas de importación
 ancho = 640
 altura = 480
 imagen = [[[255 para c en rango (3)] para x en rango (ancho)] para y en rango (altura)]
 para y en rango (altura):
	 imag = (y- (altura / 2)) / flotante (altura) * 2.5
	 para x en rango (ancho):
		 real = ((x- (ancho / 2)) / flotante (ancho) * 2.5) -0.5
		 z = complejo (real, imag)
		 c = z
		 para i en rango (255):
			 z = z * z + c
			 if (abs (z)> 2.5):
				 imagen [y] [x] = [i, i, i]
				 descanso

 salida = abierto ('mandelbrot_set.ppm', 'w')
 output.write ("P6" + str (ancho) + "" + str (alto) + "255 \ n")
 para y en rango (altura):
	 para x en rango (ancho):
		 output.write (bytearray (imagen [y] [x]))
 output.close ()

Tarda un poco en ejecutarse, crea este gráfico en un archivo llamado “mandelbrot_set.ppm”,

y Bob es tu tío.

El conjunto de Mandelbrot es un fractal en el plano complejo, que utiliza números reales en el eje horizontal y números imaginarios en el eje vertical.

El conjunto de Mandelbrot se define como la colección de todos los puntos en ese plano que no aumentan hacia el infinito cuando esta expresión se realiza en ellos muchas veces:

Z -> Z ^ 2 + C

El número complejo (Z) se eleva al cuadrado y luego se le agregan las coordenadas donde comenzó (C).

Cuando el valor absoluto del número es menor que 1, la cuadratura lo hace más pequeño. Cuando está entre 1 y 2, cuadrarlo lo hará más grande, pero agregar C podría reducirlo de nuevo a menos de 2. Una vez que el número está más lejos que 2, elevar al cuadrado lleva a un número más del doble de distancia, y agregar C no puede volver a bajarlo por debajo de 2.

Entonces, una vez que un número tiene un valor absoluto mayor que 2, desaparece para siempre. se hará más y más grande, corriendo hacia el infinito. No podemos repetir la expresión hasta que llegue al infinito, por lo que consideramos que “escapó” tan pronto como se eleva por encima de 2.

Luego contamos el número de iteraciones de la expresión que le tomó a ese punto escapar, y usamos esa cuenta para elegir un color para el punto.

En esta imagen, los puntos azul oscuro tardaron solo unas pocas iteraciones en escapar. los azules claros tomaron más tiempo, en algún lugar en los cientos. los blancos brillantes podrían haber tomado muchos cientos. cuanto más cerca esté un punto del borde del conjunto, más tardará.

El área negra está formada por puntos que nunca escapan. Decidimos que nunca se escapa un punto Si iteramos la ecuación muchas veces y no sucede.


Hay una buena introducción al conjunto de Mandelbrot en Aracnoideo: Conjunto de Mandelbrot

Ilustra cómo se ve realmente el movimiento de los puntos, y también proporciona un muy buen generador de Mandelbrot en línea y algunos ejemplos de programación en python.

He escrito mi propio generador Mandelbrot simple en Python, y tiene una salida Ascii. Puede ver el código aquí: Mandelbrot Set en Python

También construí mi propio generador Mandelbrot en Scratch, una introducción a la programación de arrastrar y soltar hecha por MIT. Es lento, pero muy flexible para probar nuevas ideas. Puede ejecutarlo (y ver todo el código) aquí: Scratch – Mandelbrot 2

Tengo una sección de mi sitio web dedicada a los fractales: Fractales | John Dorsey

realmente, esa página introductoria sobre Aracnoides es donde comencé a aprender, y fue un gran recurso. ¡Espero que esto ayude!

es un proceso recursivo, que involucra la ecuación a (n + 1) = an ^ 2 + c