Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links

Conjunto de Mandelbrot

El Conjunto de Mandelbrot se genera estudiando el comportamiento de la iteración de la ecuación compleja :

Zn+1 = Zn2 + C

donde Z, C son números complejos en nuestro caso tenemos Z=ReZ+ImZi y C=ReC+ImCi, la condicion inicial es Z=0+0i y a C se le asignan todos los puntos del plano complejo.

Generación del Conjunto de Mandelbrot

Se convierte para cada pixel de la pantalla, en nuestro caso se trata de un PictureBox cuya dimención horizontal y vertical, es screenx y screeny respectivamente a coordenanas del plano complejo, se le asigna a C este punto y se comienza a iterar la ecuación.

Si el módulo es |Z|>2 y no se supero MaxIterations, se sale del while y se le asigna a ese pixel un color de acuerdo al número de iteraciones realizadas, entonces ese pixel esta fuera del Conjunto de Mandelbrot.

Si se alcanza el número máximo de iteraciones MaxIterations, y el módulo sigue siendo |Z|<2 entonces se asume que el pixel esta dentro del Conjunto de Mandelbrot, y le asignamos el color negro.

Las siguientes representaciones del Conjunto de Mandelbrot, fueron realizadas por mandel.zip (4.36 Kb) en VisualBasic a diferentes escalas de zoom. Utilice los colores, del mapa VOLCANO.MAP de Fractint.

mandel1.jpg
xmin = -2.0, ymin = -1.5, xmax = 1.0, ymax = 1.5, Iteraciones = 256

El Conjunto de Mandelbrot tiene la propiedad de que contiene copias reducidas de si mismo a todas las escalas. Si ampliamos, por ejemplo, la zona dentro del recuadro, se pueden ver una infinidad de copias, reducidas del Conjunto de Mandelbrot.

mandel2.jpg
xmin = -0.5, ymin = -1.0, xmax = 0.0, ymax = -0.5, Iteraciones = 256

Si en este Zoom ampliamos la parte de una de las puntas se obtiene una nueva ampliación en la que aparecen nuevas copias del Conjunto de Mandelbrot.

mandel3.jpg
xmin = -0.25, ymin = -0.745, xmax = -0.125, ymax = -0.62, Iteraciones = 256

Observación

La formula iterativa del Conjunto de Mandelbrot la podemos escribir de la siguiente manera.
Z = Z2 + C
y si tomamos a Z = ReZ + ImZi y C = ReC + ImCi tenemos
ReZ + ImZi = (ReZ + ImZi)2 + (ReC + ImCi)
operando
ReZ + ImZi = (ReZ*ReZ - ImZ*ImZ) + 2ReZ*ImZi + (ReC + ImCi)
separando la parte real y la imaginaria
ReZ = ReZ*ReZ - ImZ*ImZ + ReC
ImZ = 2*ReZ*ImZ + ImC
para evaluar esto en el código utilizo una nueva variable tmp y me queda finalmente
tmp = ReZ
ReZ = ReZ*ReZ - ImZ*ImZ + ReC
ImZ = 2*tmp*ImZ + ImC

Código Fuente

Código fuente, en VisualBasic 5.0 y no contiene el executable (mandel.zip (4.36 Kb)

Private Sub AdjustAspect()
Dim want_aspect As Single
Dim canvas_aspect As Single
Dim hgt As Single
Dim wid As Single
Dim mid As Single
want_aspect = (Ymax - Ymin) / (Xmax - Xmin)
canvas_aspect = screeny / screenx
If want_aspect > canvas_aspect Then
    wid = (Ymax - Ymin) / canvas_aspect
    mid = (Xmin + Xmax) / 2
    VisibleXmin = mid - wid / 2
    VisibleXmax = mid + wid / 2
    VisibleYmin = Ymin
    VisibleYmax = Ymax
Else
    hgt = (Xmax - Xmin) * canvas_aspect
    mid = (Ymin + Ymax) / 2
    VisibleYmin = mid - hgt / 2
    VisibleYmax = mid + hgt / 2
    VisibleXmin = Xmin
    VisibleXmax = Xmax
End If
End Sub


Private Sub Mandelbrot()
Dim ReZ, ImZ As Double
Dim tmp As Double
Dim Red, Green, Blue As Double
Dim i, j As Integer
Dim N As Integer

AdjustAspect
For i = 0 To screenx
   For j = 0 To screeny
        ReZ = 0
        ImZ = 0
        ReC = ((VisibleXmax - VisibleXmin) / (screenx - 1)) * i + VisibleXmin
        ImC = ((VisibleYmax - VisibleYmin) / (screeny - 1)) * j + VisibleYmin
        N = 0
        Do While (N < MaxIterations) And (ReZ * ReZ + ImZ * ImZ < 4)
            tmp = ReZ
            ReZ = (ReZ * ReZ - ImZ * ImZ) + ReC
            ImZ = 2 * tmp * ImZ + ImC
            N = N + 1
        Loop
    If N = MaxIterations Then
        Red = RGBColor(0, 0)
        Green = RGBColor(0, 1)
        Blue = RGBColor(0, 2)
    Else
        Red = RGBColor(N, 0)
        Green = RGBColor(N, 1)
        Blue = RGBColor(N, 2)
    End If
    Picture1.PSet (i, screeny - j), RGB(Red, Green, Blue)
    Next j
Next i
End Sub


valcoey@hotmail.com

Ramiro Alcocer, 2001

Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links