Graficando fractales con Python

por | 4 junio, 2015

Hoy les traigo esta biblioteca que hice hace un tiempo para graficar fractales. También permite calcular algunas cosas como área, perímetro, ancho, alto, etc.

Esta es la lista de fractales que pueden graficar:

  • Cantor
  • Quinto de Cantor(este es una modificación del primero)
  • Árbol
  • Dragón
  • Curva de koch
  • Triángulo de pascal
  • Sierpinsky
  • Sierpinsky rectangular
  • Copo de nieve

Para graficar algunos fractales utilice el sistema Lindenmayer. Este último consiste en describir el fractal mediante una gramática formal que nos sirve para generar un string que nos permitira  realizar el gráfico mediante un graficador de tortuga. Para otros fractales, en cambio, no utilice el Sistema-L ya que no sería eficiente. Un ejemplo es el Fractal de Cantor cuya longitud de string responde a 3^n, siendo n el número de término del fractal. De todas maneras tiene un método que les devuelve dicho string.

Algunas imágenes:

No me voy a detener a explicar en detalle como utilizar, ya que la entrada se haría muy extensa. Solo voy a mencionar que en la mayoría de los fractales hay que setear la longitud de los segmentos o el alto y ancho de la imagen de salida y, al momento de generar el gráfico, pasar el color de linea, el color de relleno y el número de término. Además, para el triángulo de pascal se puede setear un función que recibe el numero de bloque y la posición x e y del mismo y debe devolver el color de relleno. Esto sirve para poder colorearlo de diversas maneras. En el ejemplo incluido en el paquete se genera el triángulo de pascal con los números pares, con los números de modulo 3, con los números triangulares, con los naturales ordenados, con los números tetraédricos 3d, 4d y 5d, y con los números cuadrados.

Por último les menciono que es solo un ejemplo y no esta pensado para generar fractales con N mayor a 10 o 20.

Les dejo el enlace al proyecto en Github.

fractalZE

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *