Aquí os dejo la receta para cocinar un "bonito" (es que en blanco y negro parece una caca de vaca) fractal Mandelbrot. Tan sólo tenéis que compilarlo, importar los datos que se escriben en el fichero con vuestro programa para graficar favorito, representarlo y listo. Esta escrito en fortran 90, pero como la mayoría de los lectores son gente culta y lista, no tendrán problema para implementarlo en el lenguaje que les plazca
---------------------------------------------------------------------------------------------------------------------------------
program Mandelbrot
implicit none
integer :: i, j,l
integer, parameter :: N = 1000
logical :: pertenece !variable lógica auxiliar para que ejecute el bucle completo
real :: h, k !en caso de que se satisfaga la condicion de pertenencia.
real, dimension(1:N) :: a, b
real, dimension(0:N-1) :: x, y, modul
h = 0.0020 !tamaño paso eje x
k = 0.0021 !tamaño paso eje y
!abrimos el fichero que recogerá los puntos que pertenecen al conjunto mandelbrot
open (1, file = 'puntos.dat')
a(1) = -1.5 !punto (a,b) por el que se empieza a comprobar la pertenencia
b(1) = -1.0
do j = 1, N
do l = 1, N
a(j+1) = a(j) + h
b(l+1) = b(l) + k
x(0) = 0.0 !condicion inicial
y(0) = 0.0
pertenece = .true. !inicializamos la variable lógica como verdadera
do i = 0, N-1
x(i+1) = x(i)**2.0 - y(i)**2.0 + a(j)
y(i+1) = 2.0 * x(i) * y(i) + b(l)
!calculamos el módulo de (x,y)
modul(i+1) = sqrt (x(i+1)**2.0 + y(i+1)**2.0)
if (modul(i+1) > 2) then
pertenece = .false.
exit
end if
end do
if (pertenece .eqv. .false.) then
cycle !si no pertenece comienza con otro (a,b)
else
write(1,*) a(j), b(l) !si pertenece, lo escribimos en el fichero
end if
end do
end do
close (1)
end program Mandelbrot
------------------------------------------------------------------------------------------------------------------------------
P.D.1: Con mi mierda de ordenador, un P-III, el programa tarda lo suyo, asiq para aquellos que aun seguís usando ordenadores con procesadores arcaicos xD, no os asusteis si en 20 minutos aun no ha terminado de calcular todos los puntos, y... sí, el paro aburre mucho.
P.D.2: Vaya, no salen las tabulaciones en el mensaje, estaria bien poder usar verbatim jeje
---------------------------------------------------------------------------------------------------------------------------------
program Mandelbrot
implicit none
integer :: i, j,l
integer, parameter :: N = 1000
logical :: pertenece !variable lógica auxiliar para que ejecute el bucle completo
real :: h, k !en caso de que se satisfaga la condicion de pertenencia.
real, dimension(1:N) :: a, b
real, dimension(0:N-1) :: x, y, modul
h = 0.0020 !tamaño paso eje x
k = 0.0021 !tamaño paso eje y
!abrimos el fichero que recogerá los puntos que pertenecen al conjunto mandelbrot
open (1, file = 'puntos.dat')
a(1) = -1.5 !punto (a,b) por el que se empieza a comprobar la pertenencia
b(1) = -1.0
do j = 1, N
do l = 1, N
a(j+1) = a(j) + h
b(l+1) = b(l) + k
x(0) = 0.0 !condicion inicial
y(0) = 0.0
pertenece = .true. !inicializamos la variable lógica como verdadera
do i = 0, N-1
x(i+1) = x(i)**2.0 - y(i)**2.0 + a(j)
y(i+1) = 2.0 * x(i) * y(i) + b(l)
!calculamos el módulo de (x,y)
modul(i+1) = sqrt (x(i+1)**2.0 + y(i+1)**2.0)
if (modul(i+1) > 2) then
pertenece = .false.
exit
end if
end do
if (pertenece .eqv. .false.) then
cycle !si no pertenece comienza con otro (a,b)
else
write(1,*) a(j), b(l) !si pertenece, lo escribimos en el fichero
end if
end do
end do
close (1)
end program Mandelbrot
------------------------------------------------------------------------------------------------------------------------------
P.D.1: Con mi mierda de ordenador, un P-III, el programa tarda lo suyo, asiq para aquellos que aun seguís usando ordenadores con procesadores arcaicos xD, no os asusteis si en 20 minutos aun no ha terminado de calcular todos los puntos, y... sí, el paro aburre mucho.
P.D.2: Vaya, no salen las tabulaciones en el mensaje, estaria bien poder usar verbatim jeje
Comentario