Saltar al contenido principal

Colores, Figuras y Animaciones

En MateFun es posible definir funciones que permiten la creación y manipulación de figuras. Además de los colores predefinidos, se pueden obtener nuevos colores utilizando la función rgb, que a partir de tres números entre 0 y 1 que indican respectivamente el aporte de rojo, verde y azul (red, green, blue), compone el color resultante.

Las figuras pueden crearse en dos dimensiones (figuras 2D) o en tres dimensiones (figuras 3D).

Ejemplo de figuras en 2D

La función rect retorna un rectángulo a partir de su base y altura, circ retorna un rectángulo a partir de su radio, segmento retorna un segmento de recta dados dos puntos (R X R) y poli retorna un polígono que une la secuencia de puntos (R*) que recibe como parámetro. Salvo segmento y poli, las demás figuras se crean siempre en el centro (0,0) de un sistema de coordenadas cartesianas. En la Figura 7 se muestran las figuras generadas por las expresiones circ(2), rect(2,2), poli((0,0):(2,2):(4,0):[]) y segmento((−1,−1),(1,1)). Dos figuras se pueden unir en una nueva figura utilizando la función juntar. A una figura se la puede pintar con un color dado utilizando la función color. También a una figura se le puede mover, rotar y escalar utilizando las funciones homónimas. En la Figura 8 se muestran las figuras generadas por las expresiones mover(rect(2,2),(1,1)), rotar(rect(2,2),45), color(rect(2,2), Rojo) y escalar(rect(2,2),0.5).

Transformaciones de figuras

Juntar figuras

En la Figura 9 se muestra las figura generada por la expresión juntar(juntar (vector1(),vector2()),vector3()), que grafica la suma de dos vectores V1 y W1. La función aFig :: A -> Fig retorna una figura con un texto definido como elemento de un conjunto enumerado. Las definiciones de las funciones se muestran a continuación, donde la función flecha que toma un punto de origen y uno de destino y dibuja una flecha es predefinida. Dados dos vectores v1 como el par de puntos (p1, p2) y v2 como el par (q1,q2), la suma de ambos v1 + v2 es el vector (p1 + q1, p2 + q2). Para la representación gráfica se define vector usando la función flecha.

sumaVectores :: (R X R) X (R X R) -> R X R 
sumaVectores (v1,v2) = (v1!1 + v2!1, v1!2 + v2!2)

vector :: (R X R) -> Fig
vector (vect) = flecha ((0,0), (vect!1, vect!2))

conj NombresVectores = { V1, W1, V1MasW1 }

vector1 :: () -> Fig
vector1 () = juntar (color((vector(3,4)), Rojo), mover(aFig(V1),(3,4) ))

vector2 :: () -> Fig
vector2 () = juntar (color((vector(4,1)), Verde), mover(aFig(W1), (4,1)))

vector3 :: () -> Fig
vector3 () = juntar (color(vector(sumaVectores ((3,4),(4,1))), Azul), mover(aFig(V1MasW1), (7,5)))

En MateFun, una animación se define como una secuencia de figuras, o sea como un elemento de del conjunto Fig*. Por ejemplo la función rotFig toma una figura y un real y produce una animación que rota la figura dada de a 10 grados tantas veces como se le indique el número real dado.

rotFig :: Fig X R -> Fig*
rotFig(fig, cant) = [] si cant <= 0
{ fig : rotFig(rotar(fig, 10), cant-1)

En la Figura 10 se presentan ejemplos de figuras en 3D. Usando la tupla vacía como dominio se pueden definir expresiones, figuras o animaciones constantes. Por ejemplo, al definir relojArena como se muestra en la Figura 11 se obtiene la figura en 3D mostrada en la Figura 10 con la expresión relojArena().

Ejemplos de figuras 3D

cilindro :: (R X R X R) -> Fig3D
cilindro (r1, r2, h) = juntarFigEn3D(circ(r1), circ(r2), h)

figur :: R X R X R X R X R X R -> Fig3D
figur(x,y,z,h,p,t) = color3D(cilindro(x,y,z), rgb(h,p,t))

relojArena :: () -> Fig3D
relojArena() = juntar3D(juntar3D(mover3D(figur(9,2,9,0,240,200), (0,0,8)),
cilindro(2,9,9)),
juntar3D(mover3D(figur(9.5,9.5,2,88,64,45), (0.2,0.1,-5)),
mover3D(figur(9.5,9.5,2,88,64,45), (0.2,0.1,13))))

Para profundizar sobre poliedros en MateFun, descarga este manual: Manual de Poliedros