El origen de la idea

Gracias a [url=https://twitter.com/laurmondejar]Laura Mondéjar[/url] en Twitter me encontré con el trabajo de [url=http://www.monikabuch.com/index.php/es/mb-monika-buch-es]Monika Buch[/url]: [br][br]https://twitter.com/laurmondejar/status/1099352098297311233[br][br]Desconocía por completo el trabajo artístico de Monika, el cual me ha parecido fascinante. Después de ver algunos de sus trabajos, decidí tratar de reproducir uno de ellos en GeoGebra.[br][br]En este libro puedes encontrar las construcciones que hice, un tutorial de cómo lo hice y algunas contribuciones de la comunidad de GeoGebra.

Cómo hacer animación de Monika Buch

Introducción
A continuación describo el método para crear la siguiente figura:
Advertencia
El método que uso es un poco largo. Seguramente hay una manera más eficiente de escribirlo. Puede ser un buen reto.
Exploración
Para comenzar, debemos observar que se trata de una construcción a partir de un solo objeto, el cual cubre una determinada área.
Mueve el punto en el centro.
Una primera exploración nos indica intuitivamente que necesitamos solamente trasladar el objeto un número determinado de veces usando vectores. ¿Pero cómo obtenemos estos vectores?[br][br]Antes de responder a esta pregunta, debemos observar que en realidad podemos considerar el objeto anterior formado por tres partes, tres polígonos, uno verde, uno rojo y uno azul.[br][br]Vamos a construir primero estos tres objetos para después calcular los vectores necesarios para realizar las traslaciones.
Construcción del objeto
Para comenzar, necesitaremos construir objetos auxiliares. [br][br]Primero comenzamos con un hexágono regular con sus vértices, su centro y tres segmentos trazados desde el centro a los vértices como se muestra a continuación:
Construcción inicial
Para esto usamos el siguiente GeoGebraScript (ggbscript):[br][br][code][/code][code]#Vértices [br]n=6[br]Execute(Sequence("A"+i+"=Rotate( (cos(pi/3*"+i+"), sin(pi/*"+i+")), -pi/6, (0,0) )", i, 1, n))[br][br]#Hexágono[br]Poly01=Polygon(A1, A2, A3, A4, A5, A6)[br][br]#Centro[br]O=(0,0)[br][br]#Segmentos desde el centro[br]S2=Segment(O, A2)[br]S4=Segment(O, A4)[br]S6=Segment(O, A6)[br][/code]
Si trazamos tres círculos, dos en vértices y uno el en centro, como se muestra en la figura de abajo y trazamos las intersecciones apropiadas, podemos construir el polígono superior.
Polígono superior
Esto se logra con el siguiente ggbscript:[br][br][code]#Círculos vértices[br]r=Slider(0.1, 1, 0.1, 1, 140, false, true, false, false)[br]C1=Circle(A1, r)[br]C3=Circle(A3, r)[br][br]#Círculo centro[br]C0=Circle(O, r)[br][br]#Intersecciones[br]I1=Intersect( C1, a1 )[br]J1=Intersect( C3, a2 )[br]L1=Intersect( C0, S2 )[br][br]#Objeto superior[br]T1=Polygon( A1, I1, L1, J1, A3, O )[br][br][/code]
Observa que he definido un deslizador (radio de los círculos) para poder cambiar la forma del objeto. Mueve el deslizador en el siguiente applet.
Listo, ahora tenemos que rotar esta figura al rededor del centro para obtener nuestra figura inicial. El ángulo que usamos es 2*pi/3.[br][br]Usando el siguiente ggbscript:[br][br][code]T2=Rotate(T1, 2*pi/3, O)[br]T3=Rotate(T1, -2*pi/3, O)[/code][br][br]Obtenemos la figura deseada.
Figura inicial
Definición de vectores
Ya tenemos nuestro objeto inicial. Ahora debemos obtener los vectores necesarios para crear la imagen mostrada al inicio.[br][br]En realidad solo necesitaremos un vector, el cual puede ser transformado bajo traslación o rotación para obtener un conjunto de vectores necesarios para crear la imagen.[br][br]La magnitud de este vector debe depender del radio de los círculos que construimos anteriormente y su dirección está determinada por el ángulo que se forma entre el eje [i]x[/i] y uno de los lados de figura superior (en rojo), cuyo valor es de pi/6 o 30[sup]o[/sup], como se muestra en el siguiente applet:
Este vector se puede construir con el ggbscript:[br][br][code]#Vector[br]auxray=Ray(O, A1)[br]auxPoint=Intersect(C1, auxray, 2)[br]u1=Vector(O, auxPoint )[/code]
Usando el vector u1 podemos formar una primera etapa de la imagen (una especie de anillo alrededor del objeto inicial), simplemente agregamos las líneas:[br][br][code]#Primera etapa[br]Execute(Sequence("FA"+i+"=Translate( T1, Rotate( u1, 2*pi/6*"+i+", O ))", i, 1, 6))[br]Execute(Sequence("FB"+i+"=Translate( T2, Rotate( u1, 2*pi/6*"+i+", O ))", i, 1, 6))[br]Execute(Sequence("FC"+i+"=Translate( T3, Rotate( u1, 2*pi/6*"+i+", O ))", i, 1, 6))[/code]
Con un ligero ajuste al ggbscript anterior:[br][br][code]#Segunda etapa[br]Execute(Sequence("SA"+i+"=Translate( T1, Rotate( 2*u1, 2*pi/6*"+i+", O ))", i, 1, 6))[br]Execute(Sequence("SB"+i+"=Translate( T2, Rotate( 2*u1, 2*pi/6*"+i+", O ))", i, 1, 6))[br]Execute(Sequence("SC"+i+"=Translate( T3, Rotate( 2*u1, 2*pi/6*"+i+", O ))", i, 1, 6))[br][br]#Tercera etapa[br]Execute(Sequence("TA"+i+"=Translate( T1, Rotate( 3*u1, 2*pi/6*"+i+", O ))", i, 1, 6))[br]Execute(Sequence("TB"+i+"=Translate( T2, Rotate( 3*u1, 2*pi/6*"+i+", O ))", i, 1, 6))[br]Execute(Sequence("TC"+i+"=Translate( T3, Rotate( 3*u1, 2*pi/6*"+i+", O ))", i, 1, 6))[/code][br][br]podemos crear lo siguiente:
Objetos restantes
Ya casi tenemos la imagen deseada. Ahora solo queda rellenar los espacios vacíos. En total nos falta poner 18 figuras, tres en cada espacio vacío. Para ello podemos definir cuatro vectores más:[br][br][code]u2=Rotate(u1, pi/3)[br][br]u3=u1+u2[br]u4=u1+2*u2[br]u5=2*u1+u2[/code][br][br]Observa que estos vectores solo dependen del vector inicial. Se trata de una rotación y de combinaciones lineales de u1 y u2.[br][br]Al rotar n*pi/3 veces (n=2,3,4,5,6) los vectores u3, u4 y u5, podemos aplicar una traslación y llenar los espacios vacíos.[br][br]De esta forma, agregando las siguientes líneas:[br][br][code]#Quad01[br]Execute(Sequence("q01a"+i+"=Translate(T1, u"+(i)+")", i, 3, 5))[br]Execute(Sequence("q01b"+i+"=Translate(T2, u"+(i)+")", i, 3, 5))[br]Execute(Sequence("q01c"+i+"=Translate(T3, u"+(i)+")", i, 3, 5))[br][br]#Quad02 [br]Execute(Sequence("q02a"+i+"=Translate(T1, Rotate(u"+i+", pi/3, (0,0)))", i, 3, 5))[br]Execute(Sequence("q02b"+i+"=Translate(T2, Rotate(u"+i+", pi/3, (0,0)))", i, 3, 5))[br]Execute(Sequence("q02c"+i+"=Translate(T3, Rotate(u"+i+", pi/3, (0,0)))", i, 3, 5))[br][br]#Quad03 [br]Execute(Sequence("q03a"+i+"=Translate(T1, Rotate(u"+i+", 2*pi/3, (0,0)))", i, 3, 5))[br]Execute(Sequence("q03b"+i+"=Translate(T2, Rotate(u"+i+", 2*pi/3, (0,0)))", i, 3, 5))[br]Execute(Sequence("q03c"+i+"=Translate(T3, Rotate(u"+i+", 2*pi/3, (0,0)))", i, 3, 5))[br][br]#Quad04 [br]Execute(Sequence("q04a"+i+"=Translate(T1, Rotate(u"+i+", 3*pi/3, (0,0)))", i, 3, 5))[br]Execute(Sequence("q04b"+i+"=Translate(T2, Rotate(u"+i+", 3*pi/3, (0,0)))", i, 3, 5))[br]Execute(Sequence("q04c"+i+"=Translate(T3, Rotate(u"+i+", 3*pi/3, (0,0)))", i, 3, 5))[br][br]#Quad05 [br]Execute(Sequence("q05a"+i+"=Translate(T1, Rotate(u"+i+", 4*pi/3, (0,0)))", i, 3, 5))[br]Execute(Sequence("q05b"+i+"=Translate(T2, Rotate(u"+i+", 4*pi/3, (0,0)))", i, 3, 5))[br]Execute(Sequence("q05c"+i+"=Translate(T3, Rotate(u"+i+", 4*pi/3, (0,0)))", i, 3, 5))[br][br]#Quad06 [br]Execute(Sequence("q06a"+i+"=Translate(T1, Rotate(u"+i+", 5*pi/3, (0,0)))", i, 3, 5))[br]Execute(Sequence("q06b"+i+"=Translate(T2, Rotate(u"+i+", 5*pi/3, (0,0)))", i, 3, 5))[br]Execute(Sequence("q06c"+i+"=Translate(T3, Rotate(u"+i+", 5*pi/3, (0,0)))", i, 3, 5))[br][/code][br]obtenemos el resultado deseado. Este se puede apreciar en siguiente applet:
Comentarios finales
Hemos logrado recrear una figura interactiva basada en transformaciones simples a partir de un objeto dado. Estas transformaciones fueron traslaciones (usando vectores) y rotaciones. [br][br]Por supuesto, la construcción puede variar dependiendo del tipo de transformación inicial que se desea aplicar. Por ejemplo se puede construir desde el centro y formar anillos alrededor. En este caso, ¿cuáles son los vectores necesarios para realizar esto? Sería un buen reto para resolver.[br][br]Bueno, hemos terminado. Espero esta exploración te sea útil. Seguramente encontrarás una manera más eficiente y elegante de hacer toda esta construcción. Si es así puedes compartir tus ideas en el sitio de GeoGebra o puedes mandarme un mensaje:[br][br]j.ponce@uq.edu.au[br][br]Todas las contribuciones serán agregadas a este libro: [url=https://ggbm.at/hhw4qabq]Composición de Monika Buch[/url]

Hexagons animation

Composición Monika Buch

[right](*) Recreación de la actividad de [url=https://www.geogebra.org/u/jcponce]Juan Carlos Ponce Campuzano[/url],[br]"[url=https://www.geogebra.org/m/krwzcfke]Hexagons or cube[/url]"[/right]

Information