Sei sulla pagina 1di 24

2.2 Coordenadas homogneas y representacin matricial.

Muchas aplicaciones grficas implican secuencias de transformaciones geomtricas. Por ejemplo, una animacin podra requerir que se traslade y gire un objeto en cada incremento del movimiento. En aplicaciones de diseo y de creacin de imgenes, realizamos traslaciones, rotaciones y escalaciones para ajustar los componentes de la imagen en sus posiciones apropiadas. Aqu, consideramos cmo se pueden volver a formular las representaciones de matriz que analizamos en las secciones anteriores de modo que se puedan procesar de manera eficiente esas secuencias de transformacin.

En la seccin 5-1 vimos que es posible expresar cada una de las transformaciones bsicas en la forma de matriz general

P' = M1 P + M2 (5-15)

Con las posiciones de coordenadas P y P' representadas como columnas de vector. La matriz M1, es una matriz de 2 por 2 que contiene factores de multiplicacin y M1, es una matriz de columnas de dos elementos que contiene trminos de traslacin. Para la traslacin, M1 es la matriz de identidad. Para la rotacin o la escalacin, M2 contiene los trminos de traslacin asociados con el punto pivote o el punto fijo de escalacin. Con el fin de producir una secuencia de transformaciones con estas ecuaciones, como escalacin seguida por rotacin y luego traslacin, debemos calcular las coordenadas transformadas un paso a La vez. Primero, se escalan las posiciones de coordenadas, despus se giran estas coordenadas escaladas y, por ltimo, se trasladan las coordenadas giradas. Un planteamiento ms eficiente combinara las transformaciones de manera que se obtienen las posiciones de coordenadas finales directamente a partir de las coordenadas iniciales para eliminar as el clculo de valores de coordenadas intermedias. Para poder efectuar esto, necesitamos formular de nuevo la ecuacin 5-15 con el propsito de eliminar la adicin de la matriz asociada con los trminos de traslacin en M2.

Podemos combinar los trminos de multiplicacin y de adicin para transformaciones geomtricas bidimensionales en una sola representacin de matriz al ampliar las representaciones de matriz de 2 por 2 a matrices de 3 por 3. Esto nos permite expresar todas las ecuaciones de matriz como multiplicaciones de matriz, si tambin ampliamos las representaciones de matriz para las posiciones de coordenadas. Para expresar cualquier transformacin bidimensional como una multiplicacin de matriz, representamos cada posicin de coordenadas cartesianas (x, y) con la tres coordenadas homogneas (xh, yh, h), donde

(5-16)

Por tanto, una representacin general de coordenadas homogneas se puede expresar tambin como (hx, hy, h). Para transformaciones geomtricas bidimensionales, seleccionamos el parmetro homogneo h como cualquier valor no cero. As, existe un nmero finito de representaciones homogneas equivalentes para cada punto de coordenadas (x, y). Una opcin conveniente consiste en slo establecer h = 1. Entonces, se representa cada posicin bidimensional con las coordenadas homogneas (x, y, 1). Se requieren otros valores para el parmetro h, por ejemplo, en las formulaciones de matriz de transformaciones de vista tridimensionales.

En matemticas, se utiliza el trmino coordenadas homogneas para referirse al efecto de esta representacin de ecuaciones cartesianas. Cuando se convierte un punto cartesiano (x,y) a una representacin homognea (xh, yh, h) las ecuaciones que contienen x y y, como f(x,y) = 0, se convierten en ecuaciones homogneas en los tres parmetros xh, yh y h. Esto slo significa que si se sustituye cada uno de los tres parmetros con cualquier valor v veces ese parmetro, el valor v se puede factorizar fuera de las ecuaciones.

Expresar posiciones en coordenadas homogneas nos permite representar todas las ecuaciones de transformacin geomtrica nos permite representar todas las ecuaciones de transformacin geomtrica como multiplicaciones de matriz. Se representan las coordenadas con vectores de columna de tres elementos y las operaciones de transformacin se expresan como matrices de 3 por 3. Para la traslacin, tenemos: (5-17)

Que podemos expresar en la forma abreviada

P' = T(tx, ty ) P (5-18)

Con T(tx, ty) como la matriz de traslacin de 3 por 3 en la ecuacin 5-17. Se obtiene el inverso de la matriz de traslacin al reemplazar los parmetros de traslacin tx y ty con sus valores negativos -tx y -ty. De modo similar, ahora se expresan las ecuaciones de transformacin de rotacin con respecto del origen de las coordenadas como: 8

(5-19) O como

P' = R() P (5-20)

El operador de transformacin de rotacin R() es la matriz de 3 por 3 en la ecuacin 5-19 con el parmetro de rotacin . Obtenemos la matriz de rotacin inversa cuando se sustituye con -. Por ltimo, ahora se expresa una transformacin de escalacin con respecto del origen de las coordenadas como la multiplicacin de matriz (5-21)

o P' = S(sx, sy) P (5-22)

Donde S(sx, sy) es la matriz de 3 por 3 en la ecuacin 5-21 con los parmetros sx y sy. Al sustituir sus inversos multiplicativos (1/sx, 1/sy) se obtiene la matriz de esacalacin inversa.

Las representaciones de matriz son mtodos estndar para implementar transformaciones en sistemas de grficas. En muchos sistemas, las funciones de rotacin y escalacin producen transformaciones con respecto del origen de las coordenadas, como en las ecuaciones 5-19 y 5-21. As se manejan las rotaciones y escalaciones con respecto de otras posiciones de referencia como una sucesin de operaciones de transformacin. Un planteamiento alternativo en un paquete de grficas consiste en dar los parmetros en las funciones de transformacin para las coordenadas del punto fijo de esacalacin y las coordenadas del punto pivote. Las matrices generales de rotacin y escalacin que incluyen el punto pivote o fijo se establecen entonces en forma directa sin necesidad de invocar una sucesin de funciones de transformacin.

2.3 Composicin de transformaciones bidimensionales.

Con las representaciones de matriz de la seccin anterior, podemos establecer una matriz para cualquier secuencia de transformaciones con una matriz de transformacin compuesta al calcular el producto de la matriz de las transformaciones individuales. La creacin de productos de matrices de transformacin a menudo se conoce como concatenacin o composicin de matrices. Para la representacin de la matriz de columnas de las posiciones de coordenadas, formamos transformaciones compuestas al multiplicar las matrices de derecha a izquierda. Es decir, cada matriz de transformacin premultiplica el producto de las matrices de transformacin previas.

2.3.1 Translaciones, rotaciones y escalaciones bidimensionales.

Traslaciones

Si se aplican dos vectores de traslacin sucesivos (tx1, ty1) y (tx2, ty2) en la posicin de coordenadas P, la localizacin transformada final P' se calcula como:

P' = T(tx2, ty2) {T(tx1, ty1) P}

= {T(tx2, ty2) T(tx1, ty1) } P (5-23)

donde se representan P y P' como vectores de columna de coordenadas homogneas. Podemos verificar este resultado al calcular el producto de la matriz para las dos agrupaciones asociativas. Asimismo, la matriz de transformacin compuesta para esta secuencia de transformacin es:

(5-24) 10

o T (tx2,ty2) T(tx1,ty1) = T(tx1 + tx2, ty1 + ty2) (5-25)

que demuestra que dos transformaciones sucesivas son aditivas.

Rotaciones

Dos rotaciones sucesivas que se aplican en el punto P producen la posicin transformada:

P' = R(2) {R(1) P}

= {R(2) R(1)} P (5-26)

Al multiplicar las dos matrices de rotacin, podemos verificar que dos rotaciones sucesivas son aditivas:

R(2) R(1) = R(2 + 1) (5-27)

de modo que es posible calcular las coordenadas giradas finales con la matriz de rotacin compuesta como:

P'= R(2 + 1) P (5-28)

Escalaciones

11

Concatenar matrices de transformacin para dos operaciones de escalacin sucesivas produce la siguiente matriz de escalacin compuesta:

(5-29)

S(sx2,sy2) S(sx1,sy1) = S(sx1 sx2, sy1 sy2) (5-30)

La matriz resultante en este caso indica que las operaciones de escalacin sucesivas son multiplicativas. Es decir, si debiramos triplicar el tamao de un objeto dos veces en una sucesin, el tamao final sera de nueve veces el tamao original.

2.3.2 Rotacin de punto de pivote general.

Con un paquete de grficas que solo ofrece una funcin de rotacin para girar objetos con respecto del origen de las coordenadas, podemos generar casi cualquier punto pivote seleccionado (xr,yr) al realizar la siguiente secuencia de operaciones de traslacin-rotacintraslacin:

1. Traslade el objeto de modo que se mueva la posicin del punto pivote al origen de las coordenadas. 2. Gire el objeto con respecto del origen de las coordenadas. 3. Traslade el objeto de manera que se regrese el punto pivote a su posicin original.

12

En la figura 5-9 se ilustra esta secuencia de transformacin. La matriz de transformacin compuesta para esta secuencia se obtiene con la concatenacin.

que se puede expresar en la forma:

T(xr,yr) R() T(-xr, -yr) = (xt, yr, ) (5-32)

donde T(-xr,-yr) = T-1(xr, yr). En general, es posible determinar una funcin de rotacin para aceptar parmetros para las coordenadas del punto pivote, as como el ngulo de rotacin, y generar en forma automtica la matriz de rotacin de la ecuacin 5-31.

2.3.3 Escalacin del punto fijo general.

La figura 5-10 ilustra una secuencia de transformacin para producir escalacin con respecto de una posicin fija seleccionada (xf, yf) al utilizar una funcin de escalacin que slo puede escalar en relacin con el origen de las coordenadas.

1. Traslade el objeto de modo que el punto fijo conincida con el origen de las coordenadas. 2. Escale el objeto con respecto del origen de las coordenadas. 3. Utilice la traslacin inversa del paso 1 para regresar el objeto a su posicin original.

La concatenacin de las matrices para estas tres operaciones produce la matriz de escalacin requerida:

13

(5- 33)

T(xf, yf) S(sx, sy) T(-xf, -yf) = S(xf, yf, sx, sy) (5-34)

Esta transformacin se genera de manera automtica en sistemas que ofrecen una funcin de escalacin que acepta las coordenadas para el punto fijo.

Direcciones de escalacin general

Los parmetros sx y sy escalan objetos a l largo de las direcciones de x y de y. Podemos escalar un objeto en otras direcciones al girar el objeto para alinear las direcciones de escalacin deseadas con los ejes de las coordenadas antes de aplicar la transformacin de escalacin.

Suponga que queremos aplicar factores de escalacin con valores que se especifican con los parmetros s1 y s2 en las direcciones se representan en la figura 5-11. Para llevar a cabo la escalacin sin cambiar la orientacin del objeto, primero realizamos una rotacin de modo que las direcciones de s1 y s2 coincidan con los ejes de x y de y, en forma respectiva. Entonces se aplica la transformacin de escalacin, seguida por una rotacin opuesta para asegurar los puntos a sus orientaciones originales. La matriz compuesta resultante del producto de estas tres transformaciones es:

R-1() S (s1, s2) R () (5-35)

Como un ejemplo de esta transformacin de escalacin, convertimos un cuadro unitario en un paralelogramo (figura 5-12) al extenderlo a lo largo de la diagonal de (0, 0) a (1, 1). Giramos la diagonal sobre el eje de las y y duplicamos su longitud con los parmetros de transformacin = 450, s1 = 1 y s2 = 2. En la ecuacin 5-35, suponemos que se debi realizar la escalacin con respecto del origen. Podramos realizar un paso ms con esta operacin de escalacin y concatenar la matriz con 14

operadores de traslacin, de modo que la matriz compuesta incluir los parmetros para la especificacin de una posicin fija de escalacin.

2.3.4 Propiedades de concatenacin

La multiplicacin de matrices es asociativa. Para tres matrices cualesquiera, A, B y C, el producto matricial A B C se puede llevar a cabo al multiplicar primero A por B o multiplicar B por C:

A B C = (A B) = A (B C) (5-36)

Por tanto, podemos evaluar los productos matriciales al utilizar una agrupacin asociativa ya sea de izquierda a derecha o de derecha a izquierda. Por otro lado, los productos de la transformacin tal vez no sean conmutativos en general, el producto matricial A B no es igual que B A. Esto significa que si queremos trasladar y girar un objeto, debemos tener cuidado sobre el sentido en que se evala la matriz compuesta (figura 513). Para algunos casos especiales, como una secuencia de transformaciones todas de la misma clase, la multiplicacin de las matrices de transformacin es conmutativa. Como por ejemplo, se podran realizar dos rotaciones sucesivas en cualquier sentido y la posicin final sera la misma. Esta propiedad conmutativa se aplica tambin para dos traslaciones sucesivas o dos escalaciones sucesivas. Otro par conmutativo de operaciones es la rotacin y la escalacin uniforme (sx,sy).

2.4 Transformacin ventana-rea de vista

Cuando se transfieren las descripciones del objeto al marco de referencia de vista, seleccionamos la extensin de la ventana en coordenadas de vista y los lmites del:

15

Puerto de vista en coordenadas normalizadas. Realizamos esto al utilizar una transformacin que mantiene la misma localizacin relativa que los objetos en un espacio normalizado tenan en coordenadas de vista. Si una posicin de coordenadas se localiza, por ejemplo, en el centro de la ventana de vista, se desplegar en el centro del puerto de vista. La figura 6-5 ilustra el mapeo de ventana a puerto de vista. Un punto en la posicin (xw, yw) en el puerto de vista asociado. Con objeto de conservar la misma posicin relativa en el puerto de vista que en la ventana, es necesario que:

(6-2) Al despejar estas expresiones para la posicin del puerto de vista (xv, yv), tenemos: xv = xvmn + (xw - xwmn ) sx

yv = yvmn + (yw ywmn ) sy (6-3)

donde los factores de escalacin son: (6-4) Tambin es posible derivar las ecuaciones 6-3 con un conjunto de transformaciones que convierte el rea de la ventana en el rea del puerto de vista. Se efecta esta conversin con la siguiente secuencia de transformaciones:

1. Se realiza una transformacin de escalacin al utilizar una posicin de punto fijo de (xwmn, ywmn) que escala el rea de la ventana al tamao del puerto de vista. 2. Se traslada el rea escalada de la ventana a la posicin del puerto de vista.

Si los factores de escalacin son los mismos (sx = sy), se mantienen las proporciones relativas de los objetos. De otro modo, los objetos mundiales se dilatarn o contraern ya sea en la direccin de x o de y al desplegarse en el dispositivo de salida. Es posible manejar de dos maneras las cadenas de caracteres al efectuar su mapeo al puerto de vista. El mapeo mapeo ms sencillo mantiene un tamao de carcter constante, aunque el rea del puerto de vista puede aumentar o reducir con respecto de la ventana. Se podra emplear este mtodo cuando el texto se forma con fuentes de carcter estndar que no es posible cambiar. En sistemas que 16

permiten cambiar el tamao de los caracteres, se pueden realizar las transformaciones de ventanas de las definiciones de cadena del mismo modo que los dems primitivos.

En el caso de los caracteres que se forman con segmentos de lnea, se puede llevar acabo el mapeo al puerto de vista como una secuencia de transformaciones lineales. A partir de las coordenadas normalizadas, las descripciones de los objetos se mapean en los diversos dispositivos de salida. Se puede activar cualquier cantidad de dispositivos en una aplicacin particular y realizar otra transformacin de ventana a puerto de vista para cada dispositivo de salida. Se realiza este mapeo, llamado transformacin de estacin de trabajo, al seleccionar un rea de la ventana en un espacio normalizado y un rea del puerto de vista en las coordenadas del dispositivo de despliegue. Con la transformacin de estacin de trabajo, logramos cierto control adicional en la disposicin de las partes de una escena en dispositivos de salida individuales. Como se ilustra en la figura 6-6, podemos utilizar transformaciones de estacin de trabajo para dividir una vista de modo que se puedan desplegar distintas partes del espacio normalizado en diferentes dispositivos de salida.

2.5 Transformaciones de la composicin

Una transformacin bidimensional general, que representa una combinacin de traslaciones, rotaciones y escalaciones, se puede expresar como:

Los cuatro elementos rsij son los trminos multiplicativos de rotacin-escalacin en la transformacin que implican slo ngulos de rotacin y factores de escalacin. Los elementos trsx y trsy son los trminos de traslacin que contienen combinaciones de distancias de traslacin, coordenadas de punto pivote y de punto fijo, as como de ngulos de rotacin y parmetros de escalacin. Por ejemplo, si se debe escalar y girar un objeto con respecto de las coordenadas de su centroide (xc, yc) y despus trasladarlo, los valores para los elementos de la matriz de transformacin compuesta son:

T (tx, ty) R (xc, yc, ) S (xc, yc, sx, sy)

17

(5-38)

Aunque la ecuacin de matriz 5-37 requiere nueve multiplicaciones y seis adiciones, los clculos explcitos para las coordenadas transformadas son

x' = x rsxx + y rsxy + trsx, y' = y rsyx + y rsyy + trsy (5-39)

As en realidad, slo necesitamos efectuar cuatro multiplicaciones y cuatro adiciones para transformar las posiciones de coordenadas. Este es el nmero mximo de clculos que se requieren para cualquier secuencia de transformacin, una vez que se han concatenado las matrices individuales y evaluando los elementos de la matriz compuesta. Sin concatenacin, se aplicarn las transformaciones individuales una a la vez y se podra reducir en forma considerable el nmero de clculos. De esta manera, una implementacin eficiente de las operaciones de transformacin consiste en formular matrices de transformacin, concatenar cualquier secuencia de transformacin y calcular las coordenadas transformadas al utilizar la ecuacin 5-39. En sistemas paralelos, las multiplicaciones matriciales directas con la matriz de transformacin compuesta de la ecuacin 5-37 pueden ser igual de eficientes.

Se puede expresar una matriz de transformacin de cuerpo general que slo implica traslaciones y rotaciones en la forma:

(5-40)

donde los cuatro elementos rij son los trminos de rotacin multiplicativos y los elementos trx y try son los trminos de traslacin. En ocasiones, un cambio de cuerpo rgido en la posicin de coordenadas se denomina transformacin de movimiento rgido. Todos los ngulos y distancias entre las posiciones de coordenadas permanecen sin cambio al realizar la transformacin. Adems, la matriz 5-40 tiene la propiedad de que su submatriz superior izquierda de 2 por 2 est en una matriz como un vector, entonces los dos vectores (rxx, rxy) y (ryx, ryy) forman un conjunto ortogonal de vectores unitarios: cada vector tiene longitud unitaria

r2xx + r2xy = r2yx + r2yy = 1 (5-41) y los vectores son perpendiculares (su producto de punto es 0): 18

rxxryx + rxyryy = 0 (5-42)

Por tanto, si estos vectores unitarios se transforman por la submatriz de rotacin, (rxx, rxy) se convierte en un vector unitario a lo largo del eje de x, y (ryx, ryy) se transforma en un vector unitario a lo largo del eje y del sistema de coordenadas: Como un ejemplo, la siguiente transformacin de cuerpo rgido primero gira un objeto a travs de un ngulo con respecto del punto pivote (xr, yr) y luego lo traslada:

T (tx, ty) R (xr, yr, )

(5-45)

Aqu, los vectores ortogonales en la submatriz superior izquierda de 2 por 2 son (cos , -sin) y (sin , cos ), y

(5-46)

De modo similar, el vector unitario (sin , cos ) se convierte por la matriz de transformacin de la ecuacin 5-46 en el vector unitario en la direccin de y. La propiedad ortogonal de las matrices de rotacin es til para realizar una matriz de rotacin cuando conocemos la orientacin final de un objeto en lugar de la cantidad de rotacin angular necesaria para colocar el objeto en esa posicin. Las direcciones para la orientacin deseada de un objeto se podran determinar mediante la alineacin de ciertos objetos en una escena o mediante posiciones seleccionadas en la escena. La figura 5-14 ilustra un objeto que se debe alinear con los vectores de direccin de unidad u' y y'. Al suponer que la orientacin original del objeto, como se muestra en la figura 5-14(a), est alineada con los ejes de las coordenadas, realizamos la transformacin deseada al asignar los elementos de u' al primer rengln de la matriz de rotacin y los elementos de v' al segundo rengln. Este puede ser un mtodo conveniente para obtener la matriz de transformacin para la rotacin en un sistema de coordenadas local (u objeto) cuando conocemos los vectores de orientacin finales. Una transformacin similar es la conversin de descripciones de objetos de un sistema de coordenadas a otro, y en los temas anteriores, consideramos cmo establecer transformaciones para efectuar esta conversin de coordenadas.

19

Dado que los clculos de la rotacin requieren evaluaciones trigonomtricas y varias multiplicaciones para cada punto que se transforma, la eficiencia computacional puede tornarse en una consideracin importante en las transformaciones de rotacin. En animaciones y otras aplicaciones que implican muchas transformaciones repetidas y ngulos de rotacin pequeos, podemos utilizar aproximaciones y clculos repetitivos para reducir los clculos en las ecuaciones de transformacin compuesta. Cuando el ngulo de rotacin es pequeo, se pueden sustituir las funciones trigonomtricas con valores de aproximacin con base en los primeros trminos de sus expansiones de series de potencia. Para ngulos bastante pequeos (de menos de l00), cos es de alrededor de 1y sen tiene un valor muy cercano al valor de en radianes. Por ejemplo, si giramos en pasos angulares pequeos alrededor del origen, podemos establecer cos como 1 y reducir los clculos de la transformacin en cada paso a dos multiplicaciones y dos adiciones para cada conjunto de coordenadas que se deben girar:

x' = x y sen y' = y sen + y

donde se evala sen una vez para todos los pasos, si se supone que el ngulo de rotacin no cambia. El error que implica esta aproximacin en cada paso disminuye conforme el ngulo de rotacin es menor. Pero incluso con ngulos de rotacin pequeos, el error acumulado sobre muchos pasos puede tornarse muy grande. Podemos controlar el error acumulado al estimar el error en x' y y' en cada paso y volver a especificar las posiciones del objeto cuando la acumulacin del error es muy grande.

Las transformaciones compuestas a menudo implican clculos de la matriz inversa. Por ejemplo, las secuencias de transformacin para las reflexiones y recortes, se pueden describir con componentes de rotacin inversa. Como hemos sealado, se pueden generar formaciones geomtricas bsicas. Se obtiene una matriz de traslacin inversa al realizar una transposicin de matriz (o cambiar el signo de los trminos del seno). Estas operaciones son ms sencillas que los clculos de matriz inversa.

En el procedimiento siguiente se da una implementacin de transformaciones compuestas. Se inicializa la matriz M para la matriz de identidad. Conforme se especifica cada transformacin individual, sta se concatena con la matriz de transformacin total M. Cuando se han especificado todas las transformaciones, se aplica esta transformacin compuesta en un objeto determinado. Para este ejemplo, se escala y gira un polgono con respecto de un punto de referencia determinado y luego se traslada el objeto. En la figura 5-15 se ilustran las posiciones original y final del polgono que se transforma mediante esta secuencia.

20

Program transformObject (input, output);

Type Matrix3x3 = array [1.. 3, 1..3] of real; var theMatrix : Matrix3x3; pts : wcPts2; refPt : wcPt2;

Procedure matrix3x3SetIdenty (var m : Matrix3x3); var r, c : integer; begin for r : = 1 to 3 do for c : = 1 to 3 do if r = c then m [r,c] : = 1 else m [r,c] : = 0 end;

procedure matrix3x3PreMultiply (m : Matrix3x3; var t : Matrix3x3); var r, c : integer; tmp : Matrix3x3; begin for r : = 1 to 3 do for c : = 1 to 3 do tmp [r, c] : m [r, 1]* t[1, c] + m[r, 2]* t[2, c] + m[r, 3]* t[3, c];

21

for r : = 1 to 3 do for c : = 1 to 3 do t[r, c] : = tmp[r, c] end;

procedure scale (sx, sy : real; refPt : wcPt2); var m : Matrix3x3; begin matrix3x3SetIdentity (m); m [1, 1] : = sx; m [1, 3] : = (1 sx) * refPt.x; m [2, 2] : = sy; m [2, 3] : = (1 y) * refPt.y; matrix3x3Premultiply (m, theMatrix); end;

procedure rotate (a : real; refPt : wcPt2); var m : Matrix3x3; function toRadians (a : real) ; real; begin toRadians : = a * 3.1416159 / 180 end; begin matrix3x3SetIdentity (m); a : = toRadians (a); m [1, 1] : = cos (a);

22

m [1, 2] : = -sin (a); m [1, 3] : = refPt.x * (1- cos (a)) = refPt.y * sin (a); m [2, 1] : = sin (a); m [2, 2] : = cos (a); m [2, 3] : = refPt.y * (1 cos (a)) refPt.x * sin (a); matrix3x3Premultiply (m, theMatrix) end;

procedure translate (tx, ty : integer); var m : Matrix3x3; begin matrix3x3SetIdentity (m); m [1, 3] : = tx; m[2, 3] : = ty; matrix3x3Premultiply (m, theMatrix) end;

procedure transformPoints (npts : integer; var pts : wcPts2); var k : integer; tmp : real; begin for k : = 1 to npts do with pts [k] do begin

23

tmp : = theMatrix3x3[1, 1] * x + theMatrix[1, 2] * y + theMatrix [1, 3]; y : = theMatrix[2, 1] * x + theMatrix[2, 2] * y + theMatrix [2, 3]; x : = tmp; end end;

begin pts [1] . x : = 50.0; pts [1] . y : = 50.0; pts [2] . x : = 150.0; pts [2] . y : = 150.0; pts [3] . x : = 100.0; pts [3] . y : = 100.0; refPt.Matrix3x3SetIdentity (theMatrix); pFillArea (3, pts); scale (0.5, 0.5, refPt); rotate (90, refPt); translate (0, 75); transformPoints (3, pts); pFillArea (3, pts); end;

2.6 Representacin matricial de transformaciones tridimensionales

24

As como las transformaciones bidimensionales se pueden representar con matrices de 3 X 3 usando coordenadas homogneas, las transformaciones tridimensionales se pueden representar con matrices de 4 X 4, siempre y cuando usemos representaciones de coordenadas homogneas de los puntos en el espacio tridimensional. As, en lugar de representar un punto como (x, y, z), lo hacemos como (x, y, z, w), donde dos de estos cudruplos representan el mismo punto si uno es multiplicador distinto de cero del otro; no se permite el cudruplo (0, 0, 0, 0). Como sucede en el espacio bidimensional, la representacin estndar de un punto (x, y, z, w) con w 0 se indica con (x/w, y/w, z/w, 1). La transformacin de un punto a esta forma se denomina homogeneizacin, igual que antes. Adems, los puntos cuya coordenada w es cero se llaman puntos en el infinito. Tambin existe una interpretacin geomtrica. Cada punto en el espacio tridimensional se representa con una lnea que pasa por el origen en el espacio de cuatro dimensiones, y las representaciones homogeneizadas de estos puntos forman un subespacio tridimensional de un espacio de cuatro dimensiones definido por la ecuacin w= 1. El sistema de coordenadas tridimensionales que se emplea en este tema es de mano derecha, como se ilustra en la figura 5. 16. Por convencin, las rotaciones positivas en el sistema de mano derecha son tales que, al ver hacia un eje positivo desde el origen, una rotacin de 900 en sentido contrario al giro del las manecillas del reloj transformar un eje positivo en otro. La tabla siguiente se desprende de esta convencin: Eje de rotacin Direccin de la rotacin positiva

xyaz yzax zxay

Estas direcciones positivas tambin se ilustran en la figura 5.16. Tenga presente que no todos los libros sobre graficacin siguen esta convencin. Usamos el sistema de mano derecha porque se trata de una convencin matemtica estndar, aunque en la graficacin tridimensional es conveniente pensar en un sistema de mano izquierda sobrepuesta a la pantalla (vase la fig. 5.17), ya que un sistema de mano izquierda da la interpretacin natural de que los valores mayores de z se encuentran ms lejos del observador. Observe que en un sistema de mano izquierda, las rotaciones positivas son el sentido del giro de las manecillas del reloj cuando se observa desde un eje positivo hacia el origen. Esta definicin de las rotaciones positivas permite que las matrices de rotacin que se presentan en esta seccin puedan usarse para sistemas de coordenadas de mano derecha o izquierda.

25

La traslacin en el espacio tridimensional es una simple extensin de la que se lleva a cabo en el espacio bidimensional:

Es decir, T (dx, dy, dz) [x y z 1]T = [x + dx y + dy z + dz 1]T. El escalamiento se extiende en forma similar: Al revisar se observa que S(sx, sy, sz) [x y z 1]T = [sx x sy y sz z 1]T. La rotacin bidimensional de la ecuacin (5. 26) es simplemente una rotacin tridimensional con respecto al eje z, que es

Es fcil verificar esta observacin: una rotacin de 900 de [1 0 1]T, que es el vector unidad sobre el eje x, debe producir el vector unidad [0 1 0 1]T sobre el eje y. Al evaluar el producto.

Se obtiene el resultado previsto de [0 1 0 1]T. La matriz de rotacin del eje x es

La matriz de rotacin del eje y es

Las columnas (y filas) de la submatriz superior izquierda de 3 X 3 de Rz (), Rx () y Ry () son vectores unidad mutuamente perpendiculares y el determinante de la submatriz es 1, lo que quiere decir que las tres matrices son ortogonales especiales, adems, la submatriz superior izquierda de 3 X 3 formada por una secuencia arbitraria de rotaciones es ortogonal especial. Recuerde que las transformaciones ortogonales conservan las distancias y los ngulos.

26

Todas estas matrices de transformacin tienen inversas. La inversa de T se obtiene cambiando el signo de dx, dy, dz; la de S, reemplazando sx, sy y sz por sus recprocos; y la inversa de cada una de las tres matrices de rotacin, negando el ngulo de rotacin.

La inversa de una matriz ortogonal B es la transpuesta de B: B-1 = BT. De hecho, para tomar la transpuesta no es intercambiar los elementos del arreglo que contiene a la matriz: basta intercambiar los ndices de las filas y las columnas al acceder a la matriz. Observe que este mtodo para hallar la inversa es consistente con el resultado del cambio de signo de para hallar la inversa de Rx, Ry y Rz.

Es posible multiplicar juntas cualquier cantidad de matrices de rotacin, escalamiento y traslacin. El resultado siempre tiene la forma

Como en el caso bidimensional, la submatriz superior izquierda de 3 X 3 R nos da la rotacin y el escalamiento combinados, mientras que T nos da la traslacin subsecuente. Podemos obtener mayor eficiencia computacional si efectuamos la transformacin en forma explicita, como

Donde R y T son submatrices de la ecuacin (5.43). Existen tres matrices de sesgo tridimensional correspondientes a las matrices de sesgo bidimensional, el sesgo (x, y) es

Al aplicar SHxy al punto [x y z 1] T se obtiene [x + shx z y + shy z 1]T. Los sesgos sobre los ejes x y y tienen forma similar. Hasta ahora hemos centrado nuestra atencin en la transformacin de puntos individuales. La transformacin de lneas, definidas stas por dos puntos, se obtiene transformando los puntos extremos. Los planos, si estn definidos por tres puntos, se pueden manejar de la misma forma, pero por lo general se definen con una ecuacin del plano y los coeficientes de esta ecuacin 27

debe transformarse de manera distinta. Tambin puede ser necesario transformar la normal al plano N = [A B C D]T. Entonces, un plano est definido por todos los puntos P tales que N P = 0, donde el smbolo es el producto punto vectorial y P = [x y z 1] T. Este producto punto da lugar a la conocida ecuacin del plano Ax + By + Cz + D = 0, que tambin se puede expresar como el producto del vector columna P: NT P = 0. Suponga ahora que transformamos todos los puntos P en el plano con una matriz M: Para mantener NT P = 0 para todos los puntos transformados, quisiramos transformar N por una matriz Q (por determinarse) que de lugar a la ecuacin (Q N) T M = 0. A su vez, esta ecuacin se puede reescribir como NT QT M P = 0 usando la identidad (Q N)T = NT QT. La ecuacin ser verdadera si QT M es mltiplo de la matriz identidad. Si el multiplicador es 1, esta situacin nos lleva a QT = M-1 o Q = (M-1). Por lo tanto, el vector columna N' de coeficientes de un plano transformado por M se expresa como

N' = (M-1) T N (5. 46)

Por lo general no es necesario que exista la matriz (M-1) T, ya que el determinante de M puede ser cero. Esta situacin ocurrira si M incluye una proyeccin. Si slo se transformar la normal al plano y si M slo consiste en una composicin de matrices de traslacin, rotacin y escalamiento uniforme, entonces se simplifican las matemticas. La N' de la ecuacin (5. 46) se puede simplificar a [A' B' C' 0] T. (con un componente W igual a cero, un punto homogneo representa un punto en el infinito, lo cual se puede considerar como una direccin).

2.7 Composicin de transformaciones tridimensionales Analizaremos la forma de componer matrices de transformacin tridimensionales usando un ejemplo que ser de utilidad. El objetivo es transformar los segmentos de Lnea dirigida P1 y P2 y P1 P3 en la fig. 5.18 de su posicin inicial en la parte (a) a su posicin final en La parte (b). De esta manera, el punto P1 se trasladar al origen, P1P2, quedar en el eje z positivo y P1P3 quedar en la mitad del eje y positivo del plano (y, z). Las longitudes de las lneas no se vern afectadas por la transformacin.

Para trabajar con las transformadas primitivas, de nuevo dividimos un problema difcil en varios ms sencillos. En este caso, la transformacin deseada se puede realizar en cuatro pasos: 1. Traslacin de P1 al origen. 2. Rotacin sobre el eje y para que P1P2 est en el plano (y, z). 3. Rotacin sobre el eje x para que P1P2 est en el eje z.

28

4. Rotacin sobre el eje z para que P1P3 est en el plano (y, z). Paso 1: Traslacin P1 al origen. La traslacin es (5.47) Al aplicar T a P1, P2 y P3 se obtiene (5.48)

(5.49) (5.50) Paso 2: Rotacin sobre eje y. En la figura 5.19 se muestra P1P2 despus del paso 1, as como la proyeccin de P1P2 sobre el plano (x, z). El ngulo de rotacin es (90 - ) = - 90. Entonces,

(5.51) donde Al sustituir estos valores en la ecuacin (5.42) se obtiene Como era de esperar, el componente x de P''2. Es cero y el componente z es la longitud D1. Paso 3: Rotacin sobre el eje x. En la figura 5. 20 se muestra P1P2 despus del paso 2. El ngulo de rotacin es , para el cual donde D2 = |P1'' P2''|, la longitud de la lnea P1'' P2''. Sin embargo, la longitud de la lnea P1'' P2'' es igual a la longitud de la lnea P1 P2, ya que las transformaciones de rotacin traslacin conservan la longitud; por lo tanto, El resultado de la rotacin en el paso 3 es Es decir, P1P2 coincide ahora con el eje z positivo. Paso 4: Rotacin sobre el eje z. En la figura 5. 21 se muestran P1P2 y P1P3 despus del paso 3, con P2''' en el eje z y P3''' en la posicin Con la rotacin a travs del ngulo positivo , con cos = y3''' /D3, sen = x3''' /D3 D3 x3'''2 + y3'''2 (5.58) Con el paso 4 se obtiene el resultado que se presenta en la figura 5.18 (b). La matriz compuesta Rz () Rx () Ry ( - 90) T (-x1, -y1, -z1) = R T. (5.59) 29

es la transformacin requerida, con R= Rz () Rx () Ry ( - 90). Dejaremos que usted aplique esta transformacin a P1, P2 y P3 para verificar que P1 se transforme al origen, P2 se transforme al al eje z positivo y que P3 se transforma a la mitad y positiva del plano (y, z). La segunda manera de obtener la matriz R es usar las propiedades de las matrices ortogonales. Rz = [r1x r2x r3x]T = (5. 61) Como Rz es el vector unidad sobre P1P2 que rotar hacia el eje z positivo, |P1P2|

Adems, el vector unidad Rx es perpendicular al plano de P1, P2 y P3 y rotar hacia el eje x positivo, de manera que Rx debe ser el producto cruz normalizado de dos vectores en el plano Finalmente, Rx = [r1x, r2x, r3x]T = Rz X Rx (5. 63) rotar hacia el eje y positivo. La matriz compuesta se expresa como

Donde R y T son como en la ecuacin (5.59). En la figura 5.22 se muestran los vectores individuales Rx, Ry y Rz. Considere otro ejemplo. En la figura 5.23 se muestra un aeroplano definido en el sistema de coordenadas xp, yp, zp y centrado en el origen. Queremos transformar el aeroplano para que apunte en la direccin indicada por el vector DDV (direccin de vuelo), est centrado en p y no est inclinado, como se muestra en la figura 5.24. La transformacin necesaria para llevar a cabo esta reorientacin consiste en una rotacin para apuntar el aeroplano en la direccin correcta, seguida por una traslacin del origen a P. para hallar la matriz de rotacin slo hay que determinar en qu direccin apuntan los ejes xp, yp y zp en la figura 5.24, asegurarse de que las direcciones estn normalizadas y luego usar estas direcciones como vectores columna en una matriz de rotacin. El eje zp debe transformarse a la direccin DDV, mientras que el eje xp debe transformarse a un vector horizontal perpendicular a DDV, o sea, en la direccin y X DDV, el producto cruz de y y DDV. La direccin yp est indicada por zp X xp = DDV X (y X DDV), el producto cruz de zp y xp; por lo tanto, las tres columnas de la matriz de rotacin son los vectores normalizados |y X DDV|, |DDV X (y X DDV)| y |DDV|:

30

Potrebbero piacerti anche