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

Conjunto de Julia

La definición del Conjunto de Julia es similar al Conjunto de Mandelbrot

Zn+1 = Zn2 + C

donde Z, C son números complejos

La constante compleja C, me determina el tipo de Conjunto de Julia.

Generacion del Conjunto de Julia

El Conjunto de Julia se calcula de manera identica que el Conjunto de Mandelbrot, salvo que en este caso C es constante, y Z va tomando los diferentes puntos del plano complejo.

Represento los puntos que tienden a 0 en negro y los puntos que se van a infinito los represento de diferentes colores según la "velocidad" con que se van a infinito, es decir el número de iteraciones necesarias para salir.

En este caso utilizo C = -0.745 + 0.1i y obtengo las siguientes representaciónes a diferentes escalas de Zoom.

julia1.jpg
xmin = -1.5, ymin = -1.5, xmax = 1.5, ymax = 1.5, Iteraciones = 256

julia2.jpg
xmin = 0.0, ymin = 0.0, xmax = 0.75, ymax = 0.75, Iteraciones = 256

julia3.jpg
xmin = 0.225, ymin = 0.2, xmax = 0.325, ymax = 0.3, Iteraciones = 256

Si tomamos un C=0.3 + 0.6i obtenemos el siguiente Conjunto de Julia.

julia4.jpg
xmin = -1.5, ymin = -1.5, xmax = 1.5, ymax = 1.5, Iteraciones = 256

Si en cambio tomamos C=-0.12 + 0.75i, obtenemos.

julia5.jpg
xmin = -1.5, ymin = -1.5, xmax = 1.5, ymax = 1.5, Iteraciones = 256

Observación

En el código se debe poner lo siguiente para obtener los respectivos Conjuntos de Julia.
Cuando :
C = -0.745 + 0.1i tenemos ReC=-0.745 y ImC=0.1
C = 0.3 + 0.6i tenemos ReC=0.3 y ImC=0.6
C = -0.12 + 0.75i tenemos ReC=-0.12 y ImC=0.75
ya que C = ReC + ImCi.
La formula iterativa del Conjunto de Julia la reescribimos tomando
Z = ReZ + ImZi y C =ReC + ImCi
y como Z = Z2 + C nos queda
ReZ + ImZi = (ReZ + ImZi)2 + (ReC + ImCi)
operando
ReZ + ImZi = (ReZ*ReZ - ImZ*ImZ) + 2*ReZ*ImZi
separo la parte real y la imaginaria.
ReZ = ReZ*ReZ - ImZ*ImZ + ReC
ImZ = 2*ReZ*ImZ + ImC
para evaluar estas expreciones en el código utilice dos nuevas varibles Re2Z y Im2Z donde.
Re2Z = ReZ*ReZ
Im2Z = ImZ*ImZ
con lo que me queda finalmente
ReZ = Re2Z - Im2Z + ReC
ImZ = 2*ReZ*ImZ

Código

Todas las imagenes de arriba fueron hechas con la siguiente rutina, el proyecto esta hecho en VisualBasic 5.0 y su código completo se encuentra en julia.zip ( 5 Kb) , no contiene el executable.

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 Julia()
Dim ReZ, ImZ As Double
Dim Re2Z, Im2Z 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 = ((VisibleXmax - VisibleXmin) / (screenx - 1)) * i + VisibleXmin
        ImZ = ((VisibleYmax - VisibleYmin) / (screeny - 1)) * j + VisibleYmin
        Re2Z = ReZ * ReZ
        Im2Z = ImZ * ImZ
        N = 0
        Do While (N < MaxIterations) And (Re2Z + Im2Z < 4)
            Re2Z = ReZ * ReZ
            Im2Z = ImZ * ImZ
            ImZ = 2 * ReZ * ImZ + ImC
            ReZ = (Re2Z - Im2Z) + ReC
            N = N + 1
        Loop
        If N = MaxIterations Then
            Red = 0#
            Green = 0#
            Blue = 0#
        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