Revisamos de forma completamente cada secciones de nuestro espacio con el objetivo de mostrarte siempre información más veraz y actualizada.
Solución:
Programar el Mandelbrot es fácil.
Mi código rápido y sucio está debajo (no se garantiza que esté libre de errores, pero es un buen resumen).
Aquí está el esquema: el conjunto de Mandelbrot se encuentra en la cuadrícula compleja completamente dentro de un círculo con radio 2.
Entonces, comience escaneando cada punto en esa área rectangular. Cada punto representa un número complejo (x + yi). Iterar ese número complejo:
[new value] = [old-value]^2 + [original-value]
mientras realiza un seguimiento de dos cosas:
1.) el número de iteraciones
2.) la distancia de [new-value] desde el origen
Si alcanza el número máximo de iteraciones, habrá terminado. Si la distancia desde el origen es mayor que 2, ya está.
Cuando haya terminado, coloree el píxel original según la cantidad de iteraciones que haya realizado. Luego pasa al siguiente píxel.
public void MBrot()
float epsilon = 0.0001; // The step size across the X and Y axis
float x;
float y;
int maxIterations = 10; // increasing this will give you a more detailed fractal
int maxColors = 256; // Change as appropriate for your display.
Complex Z;
Complex C;
int iterations;
for(x=-2; x<=2; x+= epsilon)
for(y=-2; y<=2; y+= epsilon)
iterations = 0;
C = new Complex(x, y);
Z = new Complex(0,0);
while(Complex.Abs(Z) < 2 && iterations < maxIterations)
Z = Z*Z + C;
iterations++;
Screen.Plot(x,y, iterations % maxColors); //depending on the number of iterations, color a pixel.
Algunos detalles omitidos son:
1.) Aprende exactamente qué es el cuadrado de un número complejo y cómo calcularlo.
2.) Averigüe cómo trasladar la región rectangular (-2,2) a coordenadas de pantalla.
De hecho, debe comenzar con el conjunto de Mandelbrot y comprender qué es realmente.
La idea detrás de esto es relativamente simple. Empiezas con una función de variable compleja
f(z) = z2 + C
donde z es un complejo variable y C es un complejo constante. Ahora lo iteras a partir de z = 0, es decir, calculas z1 = f(0), z2 = f(z1), z3 = f(z2) y así. El conjunto de aquellas constantes C para las cuales la sucesión z1z2z3... es encerradoes decir, no tiende al infinito, es el conjunto de Mandelbrot (el conjunto negro en la figura de la página de Wikipedia).
En la práctica, para dibujar el conjunto de Mandelbrot deberías:
- Elija un rectángulo en el plano complejo (digamos, desde el punto -2-2i hasta el punto 2+2i).
- Cubra el rectángulo con una cuadrícula de puntos rectangular adecuada (digamos, 400x400 puntos), que se asignará a píxeles en su monitor.
- Para cada punto/píxel, sea C ese punto, calcule, digamos, 20 términos de la correspondiente secuencia iterada z1z2z3, ... y comprueba si "va al infinito". En la práctica, puede verificar, durante la iteración, si el valor absoluto de uno de los 20 términos es mayor que 2 (si uno de los términos lo hace, se garantiza que los términos subsiguientes serán ilimitados). Si algún z_k lo hace, la secuencia "va al infinito"; de lo contrario, puede considerarlo como acotado.
- Si la secuencia correspondiente a un cierto punto C está acotada, dibuje el píxel correspondiente en la imagen en negro (ya que pertenece al conjunto de Mandelbrot). De lo contrario, dibújalo en otro color. Si quieres divertirte y producir bonitas tramas, dibújalo en diferentes colores dependiendo de la magnitud de abs (término 20).
El hecho sorprendente de los fractales es cómo podemos obtener un conjunto tremendamente complejo (en particular, el frontera del conjunto de Mandelbrot) de requisitos fáciles y aparentemente inocuos.
¡Disfrutar!
Si los números complejos le dan dolor de cabeza, existe una amplia gama de fractales que se pueden formular utilizando un sistema L. Esto requiere un par de capas interactuando, pero cada una es interesante por derecho propio.
Primero necesitas una tortuga. Adelante, Atrás, Izquierda, Derecha, Pluma arriba, Pluma abajo. Hay muchas formas divertidas que se pueden hacer con gráficos de tortuga usando geometría de tortuga, incluso sin un sistema L que lo controle. Busque "Gráficos de LOGOTIPO" o "Gráficos de tortuga". Un sistema LOGO completo es, de hecho, un entorno de programación Lisp que utiliza una sintaxis polaca de Cambridge sin paréntesis. Pero no tienes que ir tan lejos para obtener algunas imágenes bonitas utilizando el concepto de tortuga.
Entonces necesitas una capa para ejecutar un sistema L. Los sistemas L están relacionados con los sistemas Post y Semi-Thue y, al igual que los virii, se extienden a ambos lados de la frontera de la Completitud de Turing. el concepto es string-reescribir. Se puede implementar como un macro-expansión o un conjunto de procedimientos con controles adicionales para limitar la recursividad. si usa macro-expansión (como en el ejemplo a continuación), aún necesitará un conjunto de procedimientos para asignar símbolos a comandos de tortuga y un procedimiento para iterar a través de los string o array para ejecutar el programa tortuga codificada. Para un conjunto de procedimientos de recursividad acotada (p. ej.), incrusta los comandos de tortuga en los procedimientos y agrega comprobaciones de nivel de recurrencia a cada procedimiento o lo factoriza en una función de controlador.
Aquí hay un ejemplo de un árbol de Pitágoras en posdata usando macro-expansión y un conjunto muy abreviado de comandos de tortuga. Para ver algunos ejemplos en python y mathematica, consulte mi desafío Code Golf.
Tienes la posibilidad mostrar este enunciado si lograste el éxito.