Skip to main content

Zoom infinito y fractales (Koch)

En ocasiones anteriores, hemos visto cómo crear un efecto de zoom infinito, y también cómo utilizarlo dentro de construcciones como círculos y polígonos, o fractales como el de Sierpinski.

Una vez que conocemos la técnica, podemos aplicarla a figuras del mismo tipo. En este caso, veamos cómo utilizarlo para crear la curva de Koch (copo de nieve).

¿En qué se basa la construcción?

  • Para realizar la construcción, aprovecharemos que el fractal de Koch es autosemejante, al igual que hicimos en el caso de Sierpinski.
    Concretamente, al hacer homotecia de razón de semejanza 3 con centro en cualquiera de los dos extremos, se obtiene exactamente la misma figura.
  • Como no podemos reproducir el proceso infinito de creación de la figura, se ha creado usando solo las primeras iteraciones; 6 en este caso.
  • Por eso, una vez construidas esas primeras iteraciones del fractal, podemos ir aplicándole sucesivamente homotecias con centro en cualquiera de los extremos, aumentando la razón progresivamente hasta llegar a 3.
  • En ese momento, volvemos a tener la figura inicial, con lo que podemos volver a la situación de partida, con razón de semejanza 1.
  • Si hay suficientes vértices, el cambio no debería notarse, y podremos repetir el proceso.

Elementos de GeoGebra

  • Necesitamos una lista, que denominaremos koch, con los vértices de la poligonal.
  • Mediremos el desarrollo de esta animación mediante un deslizador animación, entre 0 y 1, que medirá el porcentaje que llevamos desarrollado.
  • Podemos crear la animación combinando dos comandos, Homotecia y Poligonal, para unir los puntos.
  • Utilizaremos el valor de la variable animacion para controlar el valor del factor de homotecia, que tendrá que ser entre 1 y 3.
  • Elegiremos como centro de la Homotecia, cualquiera de los dos extremos, y lo denominamos PExtremo. Con algunas modificaciones, podemos centrar la homotecia en el punto medio de ambos extremos.
  • Usando un incremento lineal, 1+2animacion, da la sensación de que la velocidad no es uniforme. Podemos modificarlo elevando la variable animacion a otro valor, que en este caso denominaremos velAnima, y le hemos dado el valor 1.3.

En conjunto, definimos la animación de la curva de Koch con esta poligonal:

kochVer = Poligonal(Homotecia(koch, 1 + 2animacion^velAnima, PExtremo))

Creando los vértices para la poligonal

{tab title=»Primer paso» class=»green»}

Como la curva se genera mediante un proceso iterativo, podemos partir de dos puntos, A y B e ir haciendo divisiones sucesivas del segmento que los une, e incorporando un punto para situar el vértice correspondiente al triángulo equilátero que se añade en cada división. Así, la primera lista de puntos se definiría como

koch0=A + {(0, 0), 1/3 Vector(A, B), 1/3 Vector(A, B) + Rota(1/3 Vector(A, B), 60°), 2/3 Vector(A, B)}

Si queremos incluir el punto final, definiríamos esta primera iteración como

koch1=Añade(koch0, B)

  • Para las siguientes iteraciones, tendríamos que repetir este proceso con nuevos segmentos de nuestra lista.
  • Por ello, puede resultar cómodo definir una herramienta de GeoGebra para generar esos nuevos puntos a partir de dos puntos dados.
  • Para definir la herramienta, bastará con seleccionar la lista anterior koch0 y utilizar la opción de GeoGebra «Crear una nueva herramienta«, que podemos denominar iteraKoch. (*) El hecho de no contar el extremo final del segmento es para no repetir ese punto cuando se considere como extremo inicial del siguiente.

{tab title=»Nuevas iteraciones» class=»red»}

Con los calculos realizados anteriormente, podemos definir un botón que calcule los puntos cada nueva iteración, que guardaremos en una lista que denominaremos koch.

Para dibujar la curva, bastará con unir los puntos mediante una poligonal. Por ejemplo, kochVer=Poligonal(koch), Para calcular los nuevos puntos:

  • Aplicaremos la herramienta iteraKoch a todos los puntos que ya teníamos calculados. Juntaremos todos los resultados en una única lista, utilizando el comando Encadena.
  • Añadimos el punto final B (como en el caso inicial), con el comando Añade.
  • Por comodidad, podemos guardar primero el número de veces que hay que iterar sobre los elementos, en una variable longKoch=Longitud(koch)
    .
  • Para calcular el siguiente paso de la curva, bastará con un único comando:

    Valor(koch,Añade(Encadena(
              Secuencia(iteraKoch(Elemento(koch,t),Elemento(koch,t+1))
              ,t,1,longKoch-1)
           ),B))

{tab title=»Posibles modificaciones» class=»orange»}

  • Notar que, al definirlo así, utilizando el comando Valor, la construcción deja de ser dinámica. Esto es, si modificamos la posición de A o B, la poligonal calculada no se modificará.
  • Si queremos un resultado dinámico, podríamos optar por ir definiendo diferentes listas, que podemos visualizar definiendo las correspondientes poligonales. Por ejemplo,

    koch2=Añade(Encadena(
               Secuencia(iteraKoch(Elemento(koch1,t),Elemento(koch1,t+1)) ,t,1,Longitud(koch1)-1)
               ),B)
    koch3=Añade(Encadena(
               Secuencia(iteraKoch(Elemento(koch2,t),Elemento(koch2,t+1)) ,t,1,Longitud(koch2)-1)
               ),B)

    (*) El principal problema de hacerlo así es que consumimos más recursos del navegador, al tener que guardar más información en memoria, y podemos sobrecargar la capacidad de procesamiento de listas de GeoGebra.

{/tabs}


¿Has realizado tu propia construcción con fractales y zoom infinito? ¡Compártela con nosotros! 


GeoGebra