Google Classroom
GeoGebraGeoGebra Classroom

Zoom infinito. Círculos y polígonos

Herramientas avanzadas de GeoGebra. Comandos

Con unos pocos comandos podemos crear un efecto de zoom infinito a partir de cualquier figura. Por ejemplo, un círculo o un polígono estrellado. Utiliza las opciones de esta actividad para explorar diferentes posibilidades.

¿Cómo realizar estas construcciones?

Este efecto de zoom infinito se basa en una figura inicial, por ejemplo un círculo o un polígono, y varias figuras más obtenidas mediante homotecias suyas. Ese número de figuras lo guardaremos en una variable denominada totalFiguras. Aplicaremos repetidamente un factor de zoom, que denominamos factorZoom, por ejemplo, factorZoom=0.8. Para ello, bastará ir elevándolo a exponentes correlativos. Para un círculo centrado en un punto denominado CentroFiguras, introduciríamos
FigInicial=Circunferencia(CentroFiguras, 5) totalFiguras=26 exponentes = Secuencia(t, t, 0, totalFiguras - 1)
A partir de esta figura inicial y la lista de exponentes para construir las homotecias, podemos construir la lista de figuras, que denominaremos Figuras. Para crear el efecto óptico de zoom infinito, iremos aplicando una homotecia a todas las figuras, de acuerdo con un deslizador entre 0 y 1 denominado tiempo de manera que, para tiempo=1, las figuras coincidan con la anterior en la lista de figuras correspondientes a tiempo=0. Cambiando adecuadamente los colores de esas figuras al llegar a tiempo=1, podemos volver a establecer tiempo=0, y continuar la animación. Este cambio de colores irá asociado al código que se ejecute cuando el deslizador llegue a 1. Para ello, estableceremos que su animación sea incrementando (solo una vez).
Figuras = Zip(Homotecia(FigInicial, factorZoom^(t - tiempo), CentroFiguras), t, exponentes)

Ejemplo

La construcción inicial de esta guía es algo complicada, porque incluye muchas opciones. Pero, si quieres, puedes descargar este ejemplo más sencillo para analizar su protocolo de construcción. También puedes continuar con las explicaciones paso a paso que ofrecemos a continuación.

Colorear los elementos

Para poder establecer de manera independiente el color de cada figura, necesitamos definirlas como elementos independientes y ocultar: la lista Figuras, la figura inicial y el centro. El comando Ejecuta nos ahorrará escribir muchos comandos. Para ello, le pasamos la lista de comandos que deben ejecutarse. Hay que recordar que los comandos deben escribirse en inglés. Por ello, para elegir los elementos de la lista de figuras Figuras, escribiremos "Fig"+t+"=Element(Fig,"+t+")", donde sacamos el índice t de la cadena de texto, para que pueda irse modificando según avanzamos en la secuencia de comandos.
Ejecuta(Secuencia("Fig"+t+"=Element(Figuras,"+t+")",t,1,totalFiguras))
Para colorearlos, definiremos una lista con colores aleatorios, que será la que modifiquemos cuando tiempo alcance el valor 1. Los elementos de la lista serán los porcentajes de rojo, verde y azul, respectivamente. Si queremos, podemos incluir la opacidad. Usando el comando CopiaObjetoLibre, conseguiremos que esos valores aleatorios queden fijos.
colores=CopiaObjetoLibre(Secuencia({AleatorioEntre(0,255)/255,AleatorioEntre(0,255)/255,AleatorioEntre(0,255)/255},t,1,totalFiguras))

Establecer colores

Al igual que antes, la forma más cómoda de establecer los colores es utilizando el comando Ejecuta, combinado con el comando ColorDinámico, que en inglés se denomina SetDynamicColor. Así, introducimos en la barra de entrada:
Ejecuta(Secuencia("SetDynamicColor(Fig"+t+",Element(colores,"+t+",1),Element(colores,"+t+",2),Element(colores,"+t+",3),1)",t,1,totalFiguras))
Si queremos quitar el grosor, podemos utilizar también un comando
Ejecuta(Secuencia("SetLineThickness(Fig"+t+", 0)",t,1,totalFiguras))
o bien seleccionar todos y quitar el grosor directamente. También marcamos que no se muestren las etiquetas.

Generando una iteración nueva

Podemos agregar un efecto de "desvanecimiento" a la primera figura, estableciendo su valor de opacidad (pestaña avanzado) a 1-tiempo. Por último, en el código Al Actualizar del deslizador tiempo, incluiremos la línea
Si(tiempo>=1,EjecutaAlClic(btnReinicio))
y definimos un botón llamado btnReinicio, con el código que establece reinicia el tiempo y establece los nuevos colores
Valor(tiempo,0) Valor(colores,Encadena(Extrae(colores, 2), {{AleatorioEntre(0,255)/255, AleatorioEntre(0,255)/255, AleatorioEntre(0,255)/255,1}})) IniciaAnimación(tiempo)

Ampliaciones

Como ampliación, podemos hacer que los nuevos colores no se generen aleatoriamente, sino que se repitan cada varios elementos, o incluso que sigan un patrón.
  • En el applet inicial, se incluía la posibilidad de elegir cada cuántos elementos repetir los coloes.
También, utilizando este mismo método, podemos hacer la misma construcción pero basada, por ejemplo, en polígonos.
  • En el applet que se muestra al inicio, se incluía la posibilidad de crear polígonos estrellados.
  • Además, las figuras iniciales no tienen por qué ser estáticas. Podemos hacer que giren o incluso se desplacen.
Por último, podemos hacer que no solo la figura inicial sea la que marque el ángulo de giro, sino que las demás también giren a su vez.
  • Es lo que, en las opciones se ha marcado como "retorcer".
  • Tan solo hay que tener en cuenta que, tras cada iteración, las figuras deben encajar para que se siga manteniendo el efecto de zoom continuo.