Efecto zoom infinito
¿Cómo crear una composición de este tipo?
- La construcción se basa en varias imágenes a las que se les aplica una homotecia cuyo factor de escala se va incrementando.
- En cada imagen hay una parte vacía, en la que estará otra de las imágenes de la composición (a su vez, con un factor de escala menor).
- Una vez que el factor de escala "zoom" de la imagen hace que no quede nada de la imagen en pantalla (solo se vería esa parte vacía), podemos cambiar su factor de escala por uno muy pequeño, para reutilizarla y que pase a ser la imagen interior de otra de la composición.
- Así, tan solo es necesario utilizar un número reducido de imágenes.
Elementos necesarios
- Elegimos el número máximo de imágenes que se mostrarán en la construcción. En este ejemplo, había 6. Pueden ser iguales o diferentes, pero siempre deben tener esa zona vacía en común.
- Para programar en GeoGebra, lo más cómodo es controlar el factor de escala mediante deslizadores.
- Como serán necesarios varios deslizadores, lo recomendable es utilizar una lista con los valores de esos deslizadores. A su vez, con un único deslizador general, controlaremos los valores de esta lista de deslizadores.
- Podemos situar el centro de la homotecia en cualquier zona de la parte vacía de las imágenes.
- Elegiremos el valor máximo de las homotecias de forma que nos aseguremos que, con ese factor de escala, en la vista gráfica solo se muestra el hueco de las imágenes.
Lista de deslizadores
- El deslizador general valdrá entre 0 y 1, indicando el porcentaje del proceso completo de la animación que estamos visualizando.
- Los deslizadores de la lista valdrán entre 0 y 1, indicando qué porcentaje del zoom máximo se va a aplicar a cada imagen. Si hay
n imágenes
, será una lista de n números entre 0 y 1. - Elegiremos sus valores de forma que los instantes en que valen 0 se distribuyan uniformemente a lo largo del proceso completo de animación. Utilizando el comando secuencia, establecemos los momentos de inicio como
Con esto, utilizando el comando Zip, podemos establecer el valor de cada deslizador de la lista, para que vaya avanzando entre 0 y 1 según progresa elinicioDeslizadores = Secuencia(t / n, t, 0, n - 1)
deslizadorGeneral
. Para ello, lo combinaremos con el comando Si(condición, entonces, otro_caso).deslizadores = Zip(Si(deslizadorGeneral ≥ in, deslizadorGeneral - in, 1 + deslizadorGeneral - in), in, inicioDeslizadores)
Homotecias
- Utilizando la lista de deslizadores, podemos calcular el factor de homotecia, usando también una lista.
- No siempre es conveniente que la velocidad de crecimiento del zoom sea lineal.
- Podemos modificarlo mediante una función exponencial, elevando el valor del deslizador a una constante
crecimiento
. Esto ralentizará la velocidad del zoom cuando la figura es pequeña, - Con el comando Zip,
valorZoom = Zip(maxZoom*d^crecimiento, d, deslizadores)
- Por último, si tenemos las imágenes iniciales en una lista denominada Imagenes, podemos calcular las imágenes de la animación, haciendo la homotecia de centro el punto elegido, denominado
Inicio
, y los valores para el zoom calculados previamente:imagenesMostradas = Zip(Homotecia(im, zoom, Inicio), zoom, valorZoom, im, Imagenes)
Imágenes
Para el applet del ejemplo, se han utilizado estas imágenes, del proyecto CREA, de la Junta de Extremadura (España). (Licencia CC-BY-SA)