Logo y colorines ( y II )

Volvemos con la segunda parte sobre Logo, con unas cuantas figuras...

La primera, para empezar es bastante facil: to figura1 :veces :tamanho

repeat :veces[right 360/:veces

repeat 360[ forward :tamanho right 1 ]

]

end

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".
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.
*

Dejemos aparte todo lo de "autosimilar", "dimensiones topologicas" y demás... lo mas comprensible es que "se repite a distintas escalas" y "se define mediante un simple algoritmo recursivo", vamos a probar... to fractal_cuadrado :long :prof

if prof <= 0 [stop]

repeat 4[ forward :long

right 90

fractal_cuadrado :long/(2.5) :prof-1

]

end

fractal_cuadrado 300 5

Da lugar a 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 función

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, así 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))) servirá, asi , el codigo queda

to 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

untagged

Otro huevo de pascua en Python » « Como permitir que firefox se conecte a otros puertos