Zoom infinito-Curva de Koch
¿En qué se basa la construcción?
- Para realizar la construcción, aprovecharemos que el fractal de Koch es autosemejante. 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
.
kochVer = Poligonal(Homotecia(koch, 1 + 2animacion^velAnima, PExtremo))
Creando los vértices para la poligonal de la curva de Koch
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.
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))
- 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 problema de hacerlo así es que consumimos más recursos del navegador, al tener que guardar más información en memoria.