Google Classroom
GeoGebraGeoGebra Classroom

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 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 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 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.
Con esto, 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))
  • 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.