La primera, para empezar es bastante facil:
to figura1 :veces :tamanho
repeat :veces[right 360/:veces
repeat 360[ forward :tamanho right 1 ]
]
end
Y "
figura1 72 2
" resulta en ...Fractales
Pasamos a algo mas dificil :)}
¿Que es un fractal? (segun Wikipedia)
Un fractal es un objeto semigeométrico cuya estructura básica, fragmentada o irregular, se repite a diferentes escalas.[1] Una mejor manera para comprender el comportamiento fractal de nuestro universo es considerar la siguiente definición: "Patrones que se repiten a distintas escalas".Dejemos aparte todo lo de "autosimilar", "dimensiones topologicas" y demas... lo mas comprensible es que "se repite a distintas escalas" y "se define mediante un simple algoritmo recursivo", vamos a probar...
A un objeto geométrico fractal se le atribuyen las siguientes características:[2]
- Es demasiado irregular para ser descrito en términos geométricos tradicionales.
- Posee detalle a cualquier escala de observación.
- Es autosimilar (exacta, aproximada o estadística).
- Su dimensión de Hausdorff-Besicovitch es estrictamente mayor que su dimensión topológica.
- Se define mediante un simple algoritmo recursivo.
to fractal_cuadrado :long :prof
if prof <= 0 [stop]
repeat 4[ forward :long
right 90
fractal_cuadrado :long/(2.5) :prof-1
]
end
Llamando a "
fractal_cuadrado 300 5
", conseguimos esto:Veamos como funciona, y de paso como hacer que el codigo sea aplicable a cualquier figura, la idea es esta:
to fractal_cuadrado :long :prof
No necesita explicacion, declaramos la funcion fractal_cuadrado, con los argumentos long (longitud) y prof (profundidad)
if prof <= 0 [stop]
El caso base, si ya se llego al ultimo nivel de profundidad, ya se acabo
repeat 4[ forward :long
right 90
fractal_cuadrado :long/(2.5) :prof-1
]
Como se puede ver, es practicamente el mismo codigo que para dibujar un cuadrado, solo se le añade
fractal_cuadrado :long/(2.5) :prof-1
al final, lo que hace que en cada esquina repita el proceso completo, pero haciendolo mas pequeño y con menos profundidad (sino acabaria siendo infinita)Es decir, que en cada esquina del cuadrado, se dibuja un cuadrado mas pequeño, y en cada esquina de ese cuadrado, otro aun mas pequeño, asi hasta que se alcance la profundidad maxima (a este proceso se le llama recursion)
end
Fin de la funcion
Ahora veamos como modificar el codigo para que funcione con otras figuras, el caso base no cambia...
to fractal2 :lados :long :prof
if prof <= 0 [stop]
... asi que solo nos queda el
repeat 4[ forward :long
right 90
fractal_cuadrado :long/(2.5) :prof-1
]
De nuevo,es bastante reconocible la parte que dibuja el cuadrado (esto se explica en el otro post sobre logo), asi que...
repeat :lados[ forward :long
right 360/:lados
fractal2 :lados :long/(2.5) :prof-1
]
Solo falta el
fractal2 :lados :long/(2.5) :prof-1
, la unica parte que hay que cambiar es la de :long/(2.5)
, el problema es que este numero (el 2.5 ) es algo arbitrario, debe ser lo suficientemente alto como para separar las figuras "que salen de las esquinas", distancia que es mayor a medida que aumenta :log
, pero sin pasarse, por ejemplo :long/(2+((:lados/100)*(:lados*:lados)))
servira, asi , el codigo quedato fractal2 :lados :long :prof
if prof <= 0 [stop]
repeat :lados[ forward :long
right 360/:lados
fractal2 :lados :long/(2+((:lados/100)*(:lados*:lados))) :prof-1
]
end
Y llamando a "
fractal2 3 200 4
"...(¿A nadie le suena de algo?)
Y para ir acabando... arboles binarios!
Un arbol binario es uno que del que salen dos arboles (tambien binarios), de los que vuelven a salir dos, y ... bueno, ya cojeis la idea
to arbol_binario :long :prof :grados
if prof <= 0 [ stop ]
forward :long
left :grados
arbol_binario :long/2 :prof-1 :grados
right :grados*2
arbol_binario :long/2 :prof-1 :grados
left :grados
back :long
end
Veamos como va, se que habra a quien le aburra y lo vea claro, pero, si ese es el caso, siempre os podeis saltar la explicacion... (Esta vez voy a prescindir del codigo)
La idea basicamente es hacer que cada vez que el arbol avance, se divida en dos y repetir en cada uno de los dos el mismo proceso, para que esto se pueda hacer, ademas hay que volver a la posicion original cada vez (si, simple y rapido)
Llamando a
arbol_binario 200 10 30
tenemos:Y eso es todo con Logo!
Pero espera... esto es "Logo y colorines" !! , hace falta algo de color, volvamos a la primera imagen:
La abrimos con GIMP y usamos en los filtros Artistico>GIMPresionista, el Crosshatch, obtenemos esto:
Seleccionamos todo lo que no es el fondo, y se aplica una mezcla de Quemado, con forma Radial, con centro en el centro del circulo, el resultado:
No es gran cosa, pero tendra que valer :P
Ahora si, hasta otra!
[Referencias]
http://et.bgcbellevue.org/logo/fractals.html
No hay comentarios:
Publicar un comentario