Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links
Este Fractal Biomorph, pertenece a la familia de Conjuntos de Julia donde la constante compleja C es 0.2 y el exponente de Z es 1.5.
Zn+1 = Zn1.5 + 0.2
donde Z es un número complejo
Es muy similar al del Conjunto de Julia, la difucultad esta en evaluar Z1.5 ya que se tratan de números complejos.
|
| xmin = 0.06, ymin = 0.36, xmax = 0.42, ymax = 0.63, Iteraciones = 256 |
|---|
Como Z=ReZ + ImZi, entonces tenemos Z=Z1.5 + 0.2 para evaluar esta expreción utilizo la rutina FloatPower que toma como argumentos a ReZ, ImZ y me devuelve en xtmp, ytmp elevado a 1.5. ReZ = xtmp + ReC ImZ = ytmp + ImC donde ReC=0.2 y ImC=0. |
En biomorph.zip (6 Kb) se encuentra el código completo en VisualBasic para generar la imagen de arriba, sin executable.
Sub Convercion(x As Double, y As Double, r As Double, theta As Double)
If x = 0# Then
If y = 0# Then
r = 0#
theta = 0#
Else
If y > 0# Then
r = y
theta = 0.5 * PI
Else
r = -y
theta = -0.5 * PI
End If
End If
Else
r = Sqr(x * x + y * y)
theta = Atn(y / x)
If x < 0# Then
If y >= 0# Then
theta = PI + theta
Else
theta = -PI + theta
End If
End If
End If
End Sub
Function Power(x As Double, y As Double) As Double
If x = 0# Then
If y = 0# Then
Power = 1#
Else
Power = 0#
End If
Else
Power = Exp(Log(x) * y)
End If
End Function
Sub FloatPower(x As Double, y As Double, a As Double, b As Double, N As Double)
Dim r As Double
Dim theta As Double
Dim atmp, btmp As Double
If (x * x + y * y) = 0# Then
If N = 0# Then
a = 1#
b = 0#
Else
a = 0#
b = 0#
End If
Else
Convercion x, y, r, theta
atmp = Power(r, N)
btmp = theta * N
End If
a = atmp * Cos(btmp)
b = atmp * Sin(btmp)
End Sub
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 Command1_Click()
Dim i, j As Integer
Dim ReZ As Double
Dim ImZ As Double
Dim ReC, ImC As Double
Dim N As Integer
Dim xtmp As Double
Dim ytmp As Double
Dim Red As Double
Dim Green As Double
Dim Blue As Double
AdjustAspect
ReC = -0.2
ImC = 0#
For j = 0 To screeny
For i = 0 To screenx
ReZ = ((VisibleXmax - VisibleXmin) / screenx) * i + VisibleXmin
ImZ = ((VisibleYmax - VisibleYmin) / screeny) * j + VisibleYmin
N = 0
Do While (N < iterationMax) And (ReZ * ReZ + ImZ * ImZ < 4)
FloatPower ReZ, ImZ, xtmp, ytmp, 1.5
ReZ = xtmp + ReC
ImZ = ytmp + ImC
N = N + 1
Loop
Red = RGBColor(N, 0)
Green = RGBColor(N, 1)
Blue = RGBColor(N, 2)
Picture1.PSet (i, screeny - j), RGB(Red, Green, Blue)
Next i
Next j
End Sub
|
valcoey@hotmail.com
Ramiro Alcocer, 2001
Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links