Skip to main content
sierpinski 1

Zoom infinito y fractales (Sierpinski)

Las figuras con la cualidad fractal de ser autosemejantes nos ofrecen la oportunidad de hacer bonitas animaciones basadas en ellas con efecto de «zoom infinito». 

Por definición, cuando hacemos zoom para acercarnos a una zona de una figura autosemejante, el resultado «es» una figura «igual» a la original.

En este artículo, aprenderemos a aplicar un efecto zoom infinito con GeoGebra, basándonos en un fractal.

Este tipo de construcción podría servir como proyecto de aula para alumnos a partir de 4ºESO, en el que tendrán ocasión de poner en práctica sus conocimientos de

  • Transformaciones del plano (homotecias y, según el fractal, traslaciones).
  • Vectores y su aplicación a las traslaciones.
  • Progresiones geométricas.
  • Programas de geometría dinámica (GeoGebra).
  • y por supuesto, elementos geométricos como los fractales.

Para llevar a cabo este proyecto, será preciso tener unos conocimientos básicos de GeoGebra. Hay una pequeña parte de ampliación para la que es recomendable tener algunos conocimientos sobre guiones y scripts.

El resultado será similar al que mostramos a continuación. Nos basaremos en el triángulo de Sierpinski, por ser uno de los fractales más sencillos de generar con GeoGebra:

¿En qué se basa la construcción?

  • Para realizar la construcción, aprovecharemos que el triángulo de Sierpinski es autosemejante. Concretamente, al hacer homotecia de razón de semejanza 2 con centro en cualquiera de los tres vértices del triángulo exterior y recortar, 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; 7 en este caso.
  • Pulsando el botón «Generar», podemos ver el proceso de creación y las primeras iteraciones. Fijémonos en que se basa en tener un conjunto de vértices sobre los cuales construiremos triángulos, todos iguales. En cada iteración, calculamos los nuevos vértices dividiendo a la mitad los lados de los triángulos que ya teníamos. La longitud de los lados de los nuevos triángulos también será la mitad.
  • 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 2.
  • 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.

 

Construcción en GeoGebra

{tab title=»Elementos de GeoGebra» class=»green»}

Los pasos para hacer una construcción con efecto zoom infinito basada en una figura autosemejante serán:

  • Generar una lista con las figuras. En este caso, los vértices en los que situaremos los triángulos, que denominaremos verticesIteraciones.
  • 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. Para los triángulos, utilizaremos una poligonal en lugar de un polígono, para ahorrar el tiempo de computación de rellenar los triángulos. Considerar que para triángulos muy pequeños, la diferencia será mínima.
  • Utilizaremos el valor de la variable animacion para controlar el valor del factor de homotecia, que tendrá que ser entre 1 y 2.
  • Elegiremos como centro de la Homotecia, cualquiera de los tres posibles extremos, y lo denominamos PExtremo. Con algunas modificaciones, podemos centrar la homotecia en el punto medio de ambos extremos.
  • Usando un incremento lineal, 1+animacion, 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.
  • Para calcular la longitud de los lados del triángulo en cada iteración, consideramos que en cada paso se va dividiendo a la mitad, con lo que si los vértices iniciales son A, B y C, para la iteración número numIt podemos definir los vectores

vIteracion1 = 1 / 2^numIt Vector(A,B) vIteracion1 = 1 / 2^numIt Vector(A,C)

Uniendo todo lo anterior, ya sabemos que si tenemos la lista verticesIteraciones, con los vértices inferiores izquierdos de los triángulos, podemos definir la animación del triángulo de Sierpinski con esta secuencia:

triangulosIteracion = Homotecia(Zip(
            Poligonal({V, V + vIteracion1, V + vIteracion2, V}),
            V, verticesIteraciones), 1 + animacion^velAnima, PExtremo)

{tab title=»Construimos los vértices» class=»red»}

Construir la lista de vértices puede parecernos un proceso complicado. Pero recurriendo a la definición del fractal no lo será tanto. Para ello:

  • Identificaremos cada triángulo con uno de sus vértices (así habrá que almacenar menos datos).
  • A partir de cada triángulo, definimos tres nuevos triángulos, cuyos lados miden la mitad del anterior y los vértices están situados en: Un vértice del triángulo inicial. Punto medio de cada uno de los lados que parten de ese vértice.

Podemos hacer que sea cualquier tipo de triángulo y que esté en cualquier posición (no es necesario que tenga una base paralela al eje de abscisas ni que sea equilátero). Guardaremos sus tres puntos en variables denominadas TrianguloA, TrianguloB y TrianguloC. Para poder dibujar y definir los nuevos triángulos, necesitaremos utilizar los lados y, más concretamente, los vectores correspondientes. Por eso los definimos como

vTriangulo1 = Vector(TrianguloA, TrianguloB)
vTriangulo2 = Vector(TrianguloA, TrianguloC)

(*) Utilizamos vectores en lugar únicamente longitudes, porque así nos indican la dirección en que tenemos que desplazarnos para calcular los demás vértices de cada triángulo. Definimos los elementos necesarios:

  • Partimos de un primer triángulo, que iremos dividiendo. Como solo utilizaremos un vértice de los triángulos, el elemento inicial será una lista con un único punto TrianguloA.
    Definimos la lista vertices0 = {TrianguloA}.
  • A partir de aquí, utilizaremos un proceso de inducción, que como sabemos, consiste en calcular el nuevo paso aplicando siempre las mismas normas al resultado del paso anterior. En este caso, calcular los nuevos triángulos tal y como se ha descrito antes.
  • Lo más cómodo es utilizar el comando Zip, que nos permite iterar sobre todos los elementos de una lista, ejecutando cierta acción sobre ellos (en este caso, obtener los nuevos vértices), y luego juntar todas estas pequeñas listas en una sola, utilizando el comando Encadena.
  • Así, obtendríamos las listas

    vertices1 = {TrianguloA, TrianguloA + 1 / 2 vTriangulo1, TrianguloA + 1 / 2 vTriangulo2}
    vertices2 = Encadena(Zip({V, V + 1 / 4 vTriangulo1, V + 1 / 4 vTriangulo2}, V, vertices1))
    vertices3 = Encadena(Zip({V, V + 1 / 8 vTriangulo1, V + 1 / 8 vTriangulo2}, V, vertices2))
    vertices4 = Encadena(Zip({V, V + 1 / 16 vTriangulo1, V + 1 / 16 vTriangulo2}, V, vertices3))

    Podríamos continuar así, hasta tener tantas iteraciones como queramos, hasta tener la lista final verticesIteraciones, que es la que utilizaremos para crear el efecto zoom infinito.

  • sierpinski 2
    sierpinski 3 sierpinski 5

{tab title=»Optimizando recursos (avanzado)» class=»orange»}

Si vamos a crear muchas iteraciones, especialmente si después queremos visualizar la construcción en la web, debemos tener en cuenta que estamos pidiendo a GeoGebra que haga cálculos con listas muy grandes, lo cual puede ocasionar que exija muchos recursos al ordenador, y la animación resulte poco fluida.

Para paliar esto, podemos recurrir a un pequeño truco, que consiste en conservar solamente la última lista, sobre la cual hay que operar para calcular la siguiente iteración. Además, guardaremos la lista como puntos libres de forma que, al no depender de ninguna condición, su cálculo y almacenamiento consume menos recursos del ordenador.

Para calcular la nueva iteración, bastará con calcular las nuevas longitudes de los lados y actualizar la lista con los nuevos vértices.

 

Longitudes de los lados

Bastará con dividir a la mitad las longitudes anteriores, lo cual se traduce en dividir los vectores iniciales por las correspondientes potencias de 2. Lo más cómodo es tener almacenados los resultados en forma de vector, que estarán definidos como

vIteracion1 = 1 / 2^numIt vTriangulo1
vIteracion2 = 1/2^numIt vTriangulo2

 

Lista de vértices

Podemos hacer la actualización mediante un botón, que al pulsarlo, genere los elementos necesarios. Así, bastaría con que el botón ejecutase únicamente dos instrucciones:

Valor(numIt,numIt+1) Valor(verticesIteraciones , Encadena(Zip({V, V + vIteracion1, V + vIteracion2}, V, verticesIteraciones)))

Pulsando repetidamente este botón, obtendremos las iteraciones deseadas. Conviene no usar un número elevado, para no sobrecargar la capacidad de procesamiento de listas de GeoGebra.

{/tabs}

 

Por supuesto, este procedimiento puede utilizarse para aplicar el efecto zoom infinito a otros tipos de fractales. La construicción será similar, salvo la forma de construir el fractal.

Por ejemplo, podemos intentar reproducir este efecto de zoom infinito en el copo de nieve de Koch.

koch

 En este artículo del IGEx puedes encontrar los detalles sobre la construcción

 


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


 

Esta entrada participa en la Edición 12.2: Carl Friedrich Gauss del
Carnaval de Matemáticas, que en esta ocasión organiza Gaussianos.

GeoGebra