Sitio Web de Héctor E. Medellín Anaya

Transformaciones en 3D

La representación de las transformaciones en tres dimensiones es una generalización de la de dos dimensiones.

Los puntos se representan en coordenadas homogeneas como cuartetos y las matrices de transformación son de 4x4.

Usaremos el sistema de coordenadas tridimensional de mano derecha, como se muestra en la figura.

Las transformaciones se clasifican de la siguiente manera:

Rígidas - Mantianen ángulos y longitudes. Consisten de traslaciones y rotaciones solamente.

Afines - Conservan solo el paralelismo de líneas. Secuencias de rotaciones, traslaciones y escalamientos.

No lineales - Deforman los objetos. El valor de dos coordenadas se calcula en función de la tercera. Se pueden usar expresiones lineales, cuadráticas, etc. Pueden modificar la topoloía del objeto.

Traslación

Mueve el objeto a una nueva posición. La representación matricial es la siguiente:

Escalamiento

El escalamiento c ambia el tamaño del objeto y al mismo tiempo desplaza el objeto a una nueva posición.

Rotación

La roación en tres dimensiones puede definirse alrededor de cualquier recta en el espacio. Existen tres rotaciones elementales que se definen alrededor de los ejes coordenados. Las matrices correspondientes son las siguientes.

Corte

Existen tres formas de aplicar la operación de corte o sesgado. La primera de ellas deja las coordenadas z del objeto inalteradas, la segunda deja las coordenadas y inalteradas y l atercera deja las coordenadas x inalteradas. En cada caso los coeficientes de la matriz modifican las otras dos coordenadas restantes independientemente. Las matrices correspondientes son las siguientes.

Las transformaciones de rotación y escalamiento pueden realizarse respecto a un punto fijo trasladando el punto en cuestión al origen, aplicando la rotación o escalamiento y regresando luego el objeto a la posición original. Por ejemplo, el escalamiento respecto a un punto fijo es:

El siguiente applet esta diseñado para visualizar objetos en tres dimensiones y manipularlos mediante transfromaciones. Tiene predefinidos 7 objetos, a saber: cubo, hipercubo, casa, esfera, cilindro, cono y toriode. Puede mover el punto de vista utlizando el mouse. Arrastre el mouse presionando botón izquierdo para girar en torno a x (movimiento horizontal) o en torno a y (movimiento vertical). Arrastre presionando el botón central para girar en z. Arrastre presionando botón derecho para acercar (derecha izquierda) el Punto de Referencia de Visión (VRP) y el tamaño de la ventana (arriba abajo). Para mover el origen de coordenadas, arrastre presionando tecla "shift", botón izquierdo mueve en x, botón derecho mueve en y, botón central mueve en z.

En el recuadro de texto se introducen las transformaciones con los siguientes formatos:

t(x,y,z) - traslación
e(dx,dy,dz) - escalamiento
r(n,ang) - rotación en algún eje (0=x, 1=y, 2=z), angulo ang en grados.
c(n,a,b) - corte respecto a algún eje (0=x, 1=y, 2=z), a y b números reales.

Se tiene cuatro botones:

transforma - ejecuta la lista de transformaciones del área de texto
reinicia vista - establece los parámetros de vista a sus valores iniciales
matriz - despliega en el área de texto la matriz acumulada de la última transformación
matriz inversa - despliega en el área de texto la inversa de la matriz acumulada de la última transformación

Las transformaciones deben escribirse empezando en la primer columna de cada renglón, de otra forma, serán ignoradas.

Como ejemplo relizamos una rotación de 30º de la casa alrededor de la arista 13 que une los puntos 8 y 9. Las coordenadas de los puntos son (8, 2, 12) y (0, 16, 12). Para esta rotación debemos aplicar la siguiente secuencia:

Sea V = sqrt((x2 - x1)*(x2 - x1)+(y2 - y1)*(y2 - y1)+(z2 - z1)*(z2 - z1)), a = (x1 - x1)/|V|, b = (y1 - y1)/|V|, c = (z1 - z1)/|V|, d = sqrt(a^2+b^2+c^2), alfa = acos(c/d), beta = acos(d)

T(-x1,-y1,-z1)·Rx(alfa)·Ry(beta)·Rz(30º)·Ry(-beta)·Rx(-alfa)·T(-x1,-y1,-z1)

En el programa introducimos la siguiente secuencia:

t(-8,-2,-12)
r(0,-90)
r(1,-53.13)
r(2,30)
r(1,53.13)
r(0,90)
t(8,2,12)

Aplique la secuencia y verifique que la arista en cuestión permanece inalterada.