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 variableanimacion
a otro valor, que en este caso denominaremosvelAnima
, y le hemos dado el valor1.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 denominariteraKoch
. (*) 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!