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).

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).


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().

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