Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links
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.
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.
|
| 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.
|
| 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.
|
| xmin = -0.25, ymin = -0.745, xmax = -0.125, ymax = -0.62, Iteraciones = 256 |
|---|
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, 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