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