Llevo un tiempo releyendo un libro de fractales que compré hace más de 10 años,
Geometría fractal, Algorítmica y representación, de Javier Barrallo Calonge, donde se da una breve introducción a diversos conjuntos fractales. En vez de usar C, he decidido probar alguno de los algoritmos que explican en el libro usando
Python, en especial porque tiene un módulo,
turtle que permite realizar sin ninguna dificultad gráficos de tortuga. De esta manera puedo tener código que se ejecuta en cualquier sistema que tenga el interprete Python, eso si, al menos la versión 2.4 del mismo. Aunque pierda algo de velocidad, es mucho más fácil de ver los resultados.
Curva de Koch
El primer fractal con el que he estado intentando es la curva de Koch. Esta curva se generar tomando un segmento de recta, dividiéndola en tres trozos, y sustituyendo el segmento central por otros dos segmentos rotado el primero 60º respecto al primero y el segundo 120º respecto al primero. Este proceso se repite de manera recursiva, hasta la profundidad que deseemos. El código python que genera la curva es el siguiente:
#!/usr/bin/python
import turtle
def genera_koch(level,l):
if level==0:
turtle.forward(l)
else:
genera_koch(level-1,l/3)
turtle.left(60)
genera_koch(level-1,l/3)
turtle.left(-120)
genera_koch(level-1,l/3)
turtle.left(60)
genera_koch(level-1,l/3)
turtle.setup(width=800,height=600,startx=400,starty=300)
turtle.up()
turtle.backward(125)
turtle.down()
turtle.degrees()
turtle.tracer(0)
genera_koch(5,250)
raw_input()
El programa anterior nos genera la siguiente figura:
Curva de Koch
El copo de nieve
Para generar el copo de nieve, lo que se debe hacer es partir de un triángulo equilátero, donde sustituimos cada uno de los lados del mismo con una curva de Koch. El código es el siguiente:
#!/usr/bin/python
import turtle
def genera_koch(level,l):
if level==0:
turtle.forward(l)
else:
genera_koch(level-1,l/3)
turtle.left(60)
genera_koch(level-1,l/3)
turtle.left(-120)
genera_koch(level-1,l/3)
turtle.left(60)
genera_koch(level-1,l/3)
turtle.setup(width=800,height=600,startx=400,starty=300)
turtle.up()
turtle.degrees()
turtle.tracer(0)
turtle.goto(-100,200)
turtle.down()
for i in range(0,3):
genera_koch(4,250)
turtle.right(120)
raw_input()
Este código genera el siguient gráfico:
Copo de Nieve
Referencias
No hay comentarios:
Publicar un comentario