TEMA 4: Transformaciones 3D Índice 1. Sistemas de Coordenadas 2. Transformaciones Básicas 1. Traslación 2. Escalado 3. Rotación Plana 4. Afilamiento 5. Deformaciones 3. Composición de Transformaciones 4. Rotación General 5. Transformación de Sistemas de Coordenadas Introducción • Nos movemos en un mundo 3D • Se debe permitir trabajar directamente con objetos 3D z y x • Sin embargo al final siempre habrá que generar una image 2D en pantalla • Las transformaciones son las mismas que antes, añadiendo una tercera componente – traslaciones – rotaciones – escalados Sistemas de Coordenadas • Una escena 3D se define por los puntos, líneas y planos que la componen • Necesitamos un sistema para poder referenciar las coordenadas, al igual que ocurría en 2 dimensiones • Hace falta un tercer eje, Z, perpendicular al X y al Y • Cualquier punto se describe entonces como una terna de valores (x, y, z) • Para el sentido del eje Z se usa la regla de la mano derecha Z (2,0,0) (2,0,0) (2,0,0) (2,0,0) (2,0,0) (2,0,0) Y (2,0,0) (2,0,0) X Transformaciones 3-D • Son extensiones de las transformaciones en dos dimensiones • En el caso 2D teníamos inicialmente matrices 2x2, pero eso sólo nos permitía operaciones del tipo ⎛ a1 ( x' , y ' ) = ( x, y ) ⋅ ⎜⎜ ⎝ b1 • x' = ax + by Por eso pasamos a matrices 3x3, utilizando coordenadas homogéneas ⎛ a1 ⎜ ( x' , y ' ,1) = ( x, y,1) ⋅ ⎜ b1 ⎜c ⎝ 1 • a2 ⎞ ⎟ b2 ⎟⎠ a2 b2 c2 a3 ⎞ ⎟ b3 ⎟ c3 ⎟⎠ x' = ax + by + c Por tanto, en 3-D, aplicando la misma regla, habrá que pasar a matrices 4x4 ⎛ a1 ⎜ ⎜b ( x' , y ' , z ' ,1) = ( x, y, z ,1) ⋅ ⎜ 1 c ⎜ 1 ⎜d ⎝ 1 a2 b2 c2 d2 a3 b3 c3 d3 a4 ⎞ ⎟ b4 ⎟ c4 ⎟ ⎟ d 4 ⎟⎠ x' = ax + by + cz + d Traslación • Z Reposiciona un objeto desplazándolo a las nuevas coordenadas P’ = (x’, y’, z’) P = (x, y, z) ⎧ x' = x + t x ⎪ ⎨ y' = y + t y ⎪ z' = z + t z ⎩ Y X • En forma matricial: P = ( x, y , z ) P' = ( x' , y ' , z ' ) ⎛1 ⎜ ⎜0 T =⎜ 0 ⎜ ⎜t ⎝ x 0 1 0 0 0 ty 1 tz 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ T ( − t x , −t y , − t z ) • La transformación inversa sería • Para trasladar objetos, trasladamos sólo sus vértices y redibujamos P' = P ⋅ T Escalado con respecto al origen • La posición del punto se multiplica por una constante • Hay que especificar tres factores de escala Z ⎧ x' = s x x ⎪ ⎨ y' = s y y ⎪ z' = s z z ⎩ P’ = (x’, y’, z’) P = (x, y, z) Y X • En forma matricial: P = ( x, y , z ) P' = ( x' , y ' , z ' ) ⎛ sx ⎜ ⎜0 S =⎜ 0 ⎜ ⎜0 ⎝ 0 sy 0 0 0 sz 0 0 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ P' = P ⋅ S ⎛1 1 1⎞ S⎜ , , ⎟ ⎜s s s ⎟ ⎝ x y z⎠ • La transformación inversa sería • Para trasladar objetos, trasladamos sólo sus vértices y redibujamos Rotación Plana alrededor del eje Z • El eje de rotación es paralelo a uno de los ejes principales • El signo del ángulo viene dado por la regla de la mano derecha • El punto al rotar permanece en el plano perpendicular al eje de rotación • La expresión para la rotación en el eje Z es Z Y X ⎧ x' = x cos θ − y sin θ ⎪ ⎨ y ' = x sin θ + y cos θ ⎪ z' = z ⎩ • P’ = (x’, y’, z’) En forma matricial: ⎛ cos θ ⎜ ⎜ − sin θ RZ = ⎜ 0 ⎜ ⎜ 0 ⎝ sin θ cos θ 0 0 0 0⎞ ⎟ 0 0⎟ 1 0⎟ ⎟ 0 1 ⎟⎠ Y P = (x, y, z) R P ' = P ⋅ RZ X Z Rotación Plana alrededor del eje X • Para calcular la expresión de rotación alrededor del eje X, intercambiamos las variables ⎧ x' = x cos θ − y sin θ ⎪ ⎨ y ' = x sin θ + y cos θ ⎪ z' = z ⎩ x' = x ⎧ ⎪ ⎨ y ' = y cos θ − z sin θ ⎪ z ' = y sin θ + z cos θ ⎩ Alrededor del eje Z P’ = (x’, y’, z’) Z P = (x, y, z) Y X Alrededor del eje X • En forma matricial: 0 ⎛1 ⎜ ⎜ 0 cos θ RX = ⎜ 0 − sin θ ⎜ ⎜0 0 ⎝ 0 sin θ cos θ 0 P' = P ⋅ RX 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ Rotación Plana alrededor del eje Y • Para calcular la expresión de rotación alrededor del eje Y, intercambiamos las variables ⎧ x' = x cos θ + z sin θ ⎪ y' = y ⎨ ⎪ z ' = − x sin θ + z cos θ ⎩ ⎧ x' = x cos θ − y sin θ ⎪ ⎨ y ' = x sin θ + y cos θ ⎪ z' = z ⎩ Alrededor del eje Z P’ = (x’, y’, z’) X P = (x, y, z) Z Y Alrededor del eje Y • En forma matricial: ⎛ cos θ ⎜ ⎜ 0 RY = ⎜ sin θ ⎜ ⎜ 0 ⎝ 0 − sin θ 1 0 0 cos θ 0 0 P ' = P ⋅ RY 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ Afilamiento (shearing) • Z Consiste en llevar todos los puntos de una recta que pasa por el origen sobre uno de los ejes principales y = bz Y • Ejemplo: afilar la línea y = bz sobre el eje z ⎧ y ' = y − bz ⎨ ⎩ z' = z Z • x = az Del mismo modo se transforma la línea x = az en el eje z X ⎧ x' = x − az ⎨ ⎩ z' = z Afilamiento 3-D • Combinando ambos afilamientos 2D obtenemos el 3D Æ se toma una línea arbitraria que pasa por el origen, y se mueve al eje z, dejando los valores de z fijos ⎧ x' = x − az ⎪ ⎨ y ' = y − bz ⎪ z' = z ⎩ 0 ⎛ 1 ⎜ 1 ⎜ 0 A=⎜ −a −b ⎜ ⎜ 0 0 ⎝ 0 0⎞ ⎟ 0 0⎟ 1 0⎟ ⎟ 0 1 ⎟⎠ Z y = bz x = az Y X Ejemplo a) Afilar la recta que pasa por los puntos (0,0,0) y (8,10,6) b) Obtener las nuevas coordenadas del punto P = (4,5,3) • Primero calculamos la expresión de la recta: • La transformación entonces queda: • Y la matriz: 0 ⎛ 1 ⎜ 1 ⎜ 0 A=⎜ − 4/3 −5/3 ⎜ ⎜ 0 0 ⎝ 0 0⎞ ⎟ 0 0⎟ 1 0⎟ ⎟ 0 1 ⎟⎠ ⎧ x' = x − 4 z / 3 ⎪ ⎨ y' = y − 5z / 3 ⎪ z' = z ⎩ • ⎧ x = 8t ⎪ ⎨ y = 10t ⎪ z = 6t ⎩ El punto afilado queda: P ' = P ⋅ A = (0,0,3) ⎧x = 4z / 3 ⎨ ⎩ y = 5z / 3 Deformaciones • Son transformaciones no lineales, donde la magnitud de la transformación depende de cada punto • Hasta ahora, las transformaciones han sido del tipo: • Donde: ⎛ a1 ⎜ ⎜b M =⎜ 1 c ⎜ 1 ⎜d ⎝ 1 a2 a3 b2 c2 b3 c3 d2 d3 P' = P ⋅ M a4 ⎞ ⎟ b4 ⎟ c4 ⎟ ⎟ d 4 ⎟⎠ ⎧ x' = FX ( x, y, z ) = a1 x + b1 y + c1 z + d1 ⎪ ⎨ y ' = FY ( x, y, z ) = a2 x + b2 y + c2 z + d 2 ⎪ z ' = F ( x, y , z ) = a x + b y + c z + d Z 3 3 3 3 ⎩ • Esto permite expresiones del tipo: • Estas expresiones son lineales, es decir, combinación lineal de x, y, z • Cuandos las funciones FX, FY, y FZ no sean lineales Æ DEFORMACIÓN Tapering • Consiste en escalar dos de las tres coordenadas del punto, utilizando un factor de escala que depende de la tercera coordenada ⎧ x' = s x x ⎪ ⎨ y' = s y y ⎪ z' = z ⎩ • donde ⎧sx = f ( z) ⎨ ⎩s y = f ( z ) Ejemplo: f(z) = 2z X X Z Y Z Y Tapering • La función f(z) puede ser lineal (sencilla), o puede ser todo lo complicado que se quiera • Ejemplo: f(z) = sin z NOTAS: • La mayoría de las veces es obligatorio mallar el objeto • El mallado puede ser selectivo: mallar con más detalle donde haya más curvatura • Hay que tener en cuenta que para el ordenador, el objeto no es más que un conjunto de vértices y aristas discreto Twisting • Consiste en escalar dos de las tres coordenadas del punto, utilizando un factor de escala que depende de la tercera coordenada ⎧ x' = x cos θ − y sin θ ⎪ ⎨ y ' = x sin θ + y cos θ ⎪ z' = z ⎩ donde θ = f (z ) • NOTAS: • Si no se malla, el resultado no sale poligonal • Si el eje de deformación no coincide con eje z (sino que está desplazado) habrá que trasladar primero y deshacer la traslación después Animación con deformaciones • Podemos deformar un objeto en el fotograma t0, y luego en el fotograma t1 • Luego el ordenador interpola entre ambos para los fotogramas intermedios y t0 y y traslación escalado t1 • t2 La interpolación puede ser lineal o configurable por el usuario 100% 100% 80% 50% 0% 0% t0 t1 t t0 t1 t Animación con deformaciones Deformaciones de caja • Un tipo distinto de deformaciones son las deformaciones de caja • Se coloca una caja mallada alrededor del objeto, y se deforman los vértices • El sistema calcula la expresión de la deformación resultante, y le aplica la misma transformación al objeto interior • Se usa mucho en software de modelado, para modelar objetos imperfectos a partir de una forma básica ideal Ejemplo de twist …continuación… • Como el eje del twist no coincide con el eje z, habrá que llevarlo primero hasta él, hacer el twist, y devolver el prisma a su sitio • Para mover el prisma hay que trasladarlo en x cinco unidades a la izquierda D ( z ) = T (− 5,0,0 ) ⋅ Twist (...) ⋅ T (5,0,0) • Ahora calculemos el ángulo del twist • Cómo no nos dicen como es la deformación en los puntos intermedios, asumimos una interpolación lineal – En z=0, rotamos 0 grados – En z=2, rotamos 36 grados – En z=4, rotamos 72 grados α= π 10 z …continuación • La matriz del twist será: ⎛ c s 0 0⎞ ⎟ ⎜ − s c 0 0 ⎟ ⎛ π ⎞ ⎜ Twist ⎜ − z ⎟ = ⎜ ⎟ ⎝ 10 ⎠ ⎜ 0 0 1 0 ⎟ ⎜ 0 0 0 1⎟ ⎠ ⎝ • Y la matriz final de la trasnformación será: • Para obtener el punto A=(5,3,4) transformado: donde ⎧c = cos(−π ⋅ z / 10) ⎨ ⎩ s = sin( −π ⋅ z / 10) s ⎛ c ⎜ c ⎜ −s ⎛ π ⎞ D( z ) = T (− 5,0,0 ) ⋅ Twist ⎜ − z ⎟ ⋅ T (5,0,0) = ⎜ 0 0 ⎝ 10 ⎠ ⎜ ⎜ − 5c + 5 5s ⎝ − sin( 2π / 5) ⎛ cos(2π / 5) ⎜ cos(2π / 5) ⎜ sin( 2π / 5) A' = A ⋅ D(4) = (5,3,4,1) ⋅ ⎜ 0 0 ⎜ ⎜ − 5 cos(2π / 5) + 5 5 sin(2π / 5) ⎝ A' = (3 sin(2π / 5) + 5, 3 cos(2π / 5), 4, 1) 0 0 1 0 0 0 1 0 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ Composición de Transformaciones • El escalado, la traslación y la rotación son transformaciones lineales, ya que los nuevos puntos se calculan a partir de combinaciones lineales de las componentes de los puntos originales (las deformaciones no lo son!) • Se define TRANSFORMACIÓN AFÍN a una combinación de transformaciones lineales aplicadas a un objeto • Cada transformación vendrá representada por una sola matriz, que se obtendrá multiplicando las matrices de cada una de las transformaciones, y en el mismo orden en el que queremos que se apliquen • Este hecho es el que impulsó la creación de las tarjetas gráficas (aceleradoras) • Las transformaciones afines preservan el paralelismo de las líneas, pero no sus ángulos y longitudes Rotación de 45º Escalado en x Transformación de planos • Hasta ahora hemos visto que las transformaciones se aplican solamente a los puntos • Para transformar líneas transformaremos sólo sus dos extremos, y pintaremos la línea en el nuevo sitio • Para trasnformar polígonos transformaremos sólo sus vértices • Para transformar un plano del que sólo conocemos su ecuación, habrá que transformar los coeficientes de la ecuación! • Sea el plano Ax + By + Cz + D = 0 • Llamemos N al vector N = [ A, B, C, D], donde se cumple que (A, B, C) es el vector normal al plano (ocurre lo mismo con una recta) • La ecuación del plano en forma matricial puede ponerse como donde P = [x, y, z, 1] N ⋅ PT = 0 Transformación de planos • Sea M la transformación afín aplicada al plano • Para transformar puntos sueltos del plano haríamos P’ = P M • Pero para obtener la ecuación completa del plano transformado necesitamos hacer N’ = N Q, donde Q es una matriz que tenemos que calcular • Se ve claro que M no es igual a Q escalando • Para deducir la matriz Q partimos de la ecuación del plano transformado: N '⋅(P ') = 0 ⇒ ... ⇒ N ⋅ Q ⋅ M T ⋅ P T = 0 T ( ) Q = MT • Y de aquí deducimos que: • Aunque en la práctica es mejor hacer −1 ( Q = M −1 ) T Ejemplo ⎛ cos α ⎜ ⎜ − sin α M = RZ (α ) = ⎜ 0 ⎜ ⎜ 0 ⎝ ( Q= M ) −1 T ⎛ cos α ⎜ ⎜ − sin α =⎜ 0 ⎜ ⎜ 0 ⎝ sin α cos α 0 0 sin α cos α 0 0 0 0⎞ ⎟ 0 0⎟ 1 0⎟ ⎟ 0 1 ⎟⎠ 0 0⎞ ⎟ 0 0⎟ 1 0⎟ ⎟ 0 1 ⎟⎠ N ' = N ⋅ Q = (− 2c + 3s, − 2 s − 3c, 0, 6 ) P ' = (−2c + 3s ) x + (−2 s − 3c) y + 6 = 0 2 y 3 x • Para el caso alfa = PI: P' = 2 x + 3 y + 6 = 0 Cálculo automático de una transformación afín • A veces es necesario llevar un objeto de una posición y orientación a otra. • Por ejemplo, si tu aplicación tuviese una opción de centrar el objeto en algún sitio concreto. • ¿Cómo calculamos la matriz de transformación que me hace eso? • Ejemplo: P3 Y Y P2 P1 P3 P1 X Z • Z X P2 Solución: dividiendo el problema en subproblemas más sencillos, y combinando todas las transformaciones … continuación … 1) Trasladamos P1 al origen P3 Y Y P2 P3 P1 P2 X X P1 Z ⎛ 1 ⎜ ⎜ 0 T (− x1 ,− y1 ,− z1 ) = ⎜ 0 ⎜ ⎜− x ⎝ 1 Z 0 0 1 0 − y1 0 1 − z1 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ ⎧ P1 ' = (0,0,0,1) ⎪ ⎨ P2 ' = ( x'2 , y '2 , z '2 ,1) ⎪ P ' = ( x' , y ' , z ' ,1) 3 3 3 ⎩ 3 … continuación … 2) Rotamos sobre el eje Y, hasta llevar el segmento P1P2 sobre el plano YZ Y Y P2 P1 Z θ P2 X P1 X d1 Z d1 = ⎛ z '2 / d1 ⎜ 0 ⎜ RY (−θ ) = ⎜ − x'2 / d1 ⎜ ⎜ 0 ⎝ (x'2 )2 + (z '2 )2 0 x'2 / d1 0 ⎞ ⎟ 1 0 0⎟ 0 z '2 / d1 0 ⎟ ⎟ 0 0 1 ⎟⎠ P1 ' ' = (0,0,0,1) ⎧ ⎪ ⎨ P2 ' ' = (0, y '2 , d1 ,1) ⎪ P ' ' = ( x ' ' , y ' ' , z ' ' ,1) 3 3 3 ⎩ 3 … continuación 3) Rotamos sobre el eje X, hasta llevar el segmento P1P2 sobre el eje Z Y P2 d2 φ Y X P1 P1 X Z d2 = Z ( y2 ' ')2 + (z2 ' ')2 0 ⎛1 ⎜ ⎜ 0 z2 ' ' / d 2 RX (φ ) = ⎜ 0 − y2 ' ' / d 2 ⎜ ⎜0 0 ⎝ 0 y2 ' ' / d 2 z2 ' ' / d 2 0 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ P2 P1 ' ' ' = (0,0,0,1) ⎧ ⎪ P2 ' ' ' = (0,0, d 2 ,1) ⎨ ⎪ P ' ' ' = ( x ' ' ' , y ' ' ' , z ' ' ' ,1) 3 3 3 ⎩ 3 … continuación 4) Rotamos sobre el eje Z, hasta llevar el punto P3 al plano YZ Y Y P3 P3 d3 α P1 X X P1 Z d3 = ⎛ y3 ' ' ' / d 3 ⎜ ⎜ − x ' ' ' / d3 RZ (α ) = ⎜ 3 0 ⎜ ⎜ 0 ⎝ La matriz final es: (x3 ' ' ')2 + (z3 ' ' ')2 x3 ' ' ' / d 3 y3 ' ' ' / d 3 0 0 0 0⎞ ⎟ 0 0⎟ 1 0⎟ ⎟ 0 1 ⎟⎠ Z P2 ⎧ P1 ' ' ' ' = (0,0,0,1) ⎪ ⎨ P2 ' ' ' ' = (0,0, d 2 ,1) ⎪ P ' ' ' ' = (0, d , z ' ' ' ' ,1) 3 3 ⎩ 3 M = T (− x1 ,− y1 ,− z1 ) ⋅ RY (−θ ) ⋅ RX (φ ) ⋅ RZ (α ) Ejemplo … continuación … …continuación… … continuación … …continuación… …continuación… Rotación General • Las rotaciones planas tenían como eje uno de los ejes principales • Ahora usaremos como eje de rotación una recta cualquiera, que ni siquiera debe pasar por el origen de coordenadas • La recta vendrá dada por dos puntos, P1 y P2 • La ecuación paramétrica de la recta es: ⎧ x = ( x2 − x1 )t + x1 = at + x1 ⎪ ⎨ y = ( y2 − y1 )t + y1 = bt + y1 ⎪ z = ( z − z )t + z = ct + z 2 1 1 1 ⎩ Z P2 P1 Y X donde el vector (a, b, c) indica la dirección de la recta • Para resolver el problema hacemos como anteriormente: dividirlo en subproblemas más sencillos … continuación … 1) Trasladamos P1 al origen Z Z P2 P1 P2 Y Y P1 X X ⎛ 1 ⎜ ⎜ 0 T (− x1 ,− y1 ,− z1 ) = ⎜ 0 ⎜ ⎜− x ⎝ 1 0 0 1 0 − y1 0 1 − z1 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ ⎧ P1 ' = (0,0,0,1) ⎨ ⎩ P2 ' = (a, b, c,1) …continuación… 2) Rotamos en X, hasta que la recta se coloque sobre el plano XZ Z Z P2 φ (0,b,c) d1 Y P1 X 0 0 ⎛1 ⎜ ⎜ 0 c / d1 b / d1 RX (φ ) = ⎜ 0 − b / d1 c / d1 ⎜ ⎜0 0 0 ⎝ d1 = b 2 + c 2 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ ⎧ P1 ' = (0,0,0,1) ⎨ ⎩ P2 ' = (a,0, d1 ,1) Y …continuación… 3) Rotamos en Y, hasta que la recta se coloque sobre el eje Z Z Z P2 (a,0,d1) P1 Y X X ⎛ d1 / d 2 ⎜ ⎜ 0 RY (−α ) = ⎜ − a / d2 ⎜ ⎜ 0 ⎝ α d2 d1 = a 2 + d1 0 a / d2 1 0 0 d1 / d 2 0 0 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ 2 ⎧ P1 ' = (0,0,0,1) ⎨ ⎩ P2 ' = (0,0, d 2 ,1) … continuación 4) Rotamos en Z el ángulo que queríamos rotar 5) Hacemos la rotación inversa RY (α ) 6) Hacemos la rotación inversa RX (−φ ) 7) Deshacemos la traslación inicial RZ (θ ) θ Z T ( x1 , y1 , z1 ) Y X Finalmente, la matriz de transformación completa para una rotación general será el resultado de multiplicar las siete anteriores M = T (− x1 ,− y1 ,− z1 ) ⋅ RX (φ ) ⋅ RY (−α ) ⋅ RZ (θ ) ⋅ RY (α ) ⋅ RX (−φ ) ⋅ T ( x1 , y1 , z1 ) Ejemplo … continuación… … continuación … … continuación Ejemplo Transformación de Sistemas de Coordenadas • Hasta ahora hemos visto cómo transformar un conjunto de puntos de un objeto en otro, mientras el sistema permanece fijo • A veces querremos expresar los puntos del objeto en función de un sistema de coordenadas diferente • Normalmente, los objetos vienen definidos en un sistema local • Cuando se monta la escena, todos los puntos deben estar referidos a un único sistema global z y x z x z x y y Caso 2D • Sea el punto P, de coordenadas (8,4) con respecto al sistema XY • ¿Qué coordenadas tendrá P respecto al sistema UV? Y V P=(8,4) 5 X La operación es equivalente a aplicarle a P la misma transformación que tendríamos que aplicarle al sistema nuevo (UV) para llevarlo al viejo (XY) ⎛ 1 0 0⎞ ⎜ ⎟ T (−5,0) = ⎜ 0 1 0 ⎟ ⎜ − 5 0 1⎟ ⎝ ⎠ P' = P ⋅ T (−5,0) = (3,4,1) U … continuación • • Y si el sistema UV estuviese rotado con respecto al XY, ¿Qué coordenadas tendrá P respecto al sistema UV? Y V 60º P X • La solución es la misma: utilizar la tranformación que lleva el sistema nuevo (UV) al viejo (XY) ⎛ cos(π / 3) sin (π / 3) 0 ⎞ ⎜ ⎟ R(π / 3) = ⎜ − sin (π / 3) cos(π / 3) 0 ⎟ ⎜ 0 0 1 ⎟⎠ ⎝ U P' = P ⋅ R(π / 3) ≈ (0.54,8.93,1) Caso general 2D • Dado un sistema UV localizado en el punto (a,b), y rotado un ángulo alfa con respecto al sistema XY, la matriz de cambio de sistema de referencia viene dada por: V Y P U (a,b) M = T (− a,−b) ⋅ R (α ) X • Siempre habrá que trasladar en primer lugar, para no mover el sistema nuevo de sitio en la rotación • Pero existe un problema Æ no siempre es tan fácil calcular el ángulo de rotación entre ambos sistemas (en 2D puede pero en 3D es muy difícil!) • • Lo más normal es que el sistema nuevo (UV) venga dado por la posición de su origen, y por las componentes de sus direcciones, es decir, los vectores u,v ¿Cómo podemos calcular la rotación de forma más sencilla? V=<vx,vy> Y U=<ux,uy> (a,b) X … continuación • Supongamos que los dos sistemas tienen el mismo origen • Los ejes del sistema nuevo son: • Y ⎧u =< u x , u y > ⎨ ⎩ v =< v x , v y > V α Es fácil ver que las componentes de los vectores son: α ⎧u =< u cos α ,− u sin α > ⎨ ⎩ v =< v sin α , v cos α > • • U En realidad, lo importante no es calcular el ángulo a rotar, sino la matriz de rotación: ⎛ cos α ⎜ R(α ) = ⎜ − sin α ⎜ 0 ⎝ sin α cos α 0 0⎞ ⎟ 0⎟ 1 ⎟⎠ Pero si los vectores u,v estuvieran normalizados, la matriz podría ponerse como: X ⎛ ux ⎜ R(α ) = ⎜ u y ⎜0 ⎝ vx vy 0 0⎞ ⎟ 0⎟ 1 ⎟⎠ Caso 3D • Z En 3D puede aplicarse la misma técnica para obtener la matriz de rotación! W • De no ser así, para llevar el sistema nuevo (UV) al viejo (XY) habría que hacer 3 rotaciones diferentes • Dado un sistema UVW definido por los vectores unitarios ⎧ u =< u x , u y , u z > ⎪v =< v , v , v > x y z ⎨ ⎪w =< w , w , w > x y z ⎩ • La matriz de rotación necesaria para llevar el sistema nuevo al viejo se forma de la siguiente manera: V Y X ⎛ ux ⎜ ⎜u R=⎜ y u ⎜ z ⎜0 ⎝ U vx wx vy vz wy wz 0 0 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ Caso general 3D • Z Dado un sistema UVW localizado en el punto (a,b,c), definido por los vectores unitarios {u,v,w}, la matriz de cambio de sistema de referencia viene dada por: W V (a,b,c) M = T ( − a , −b, − c ) ⋅ R Y X • U Siempre habrá que trasladar en primer lugar, para no mover el sistema nuevo de sitio en la rotación 0 0 ⎛ 1 ⎜ 1 0 ⎜ 0 M =⎜ 0 0 1 ⎜ ⎜− a −b − c ⎝ 0 ⎞⎛ u x ⎟⎜ 0 ⎟⎜ u y 0 ⎟⎜ u z ⎟⎜ 1 ⎟⎠⎜⎝ 0 vx wx vy vz wy wz 0 0 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ … continuación • Si los vectores {u,v,w} no fueran unitarios, puede que eso signifique que el sistema nuevo está a una escala diferente • Ejemplo: un sistema en metros y otro en centímetros • Para llevar el nuevo al viejo habrá que escalar por 100 • Caso general: sean {LU, LV, LW} las longitudes de los vectores {u,v,w} • Para obtener la matriz de cambio de sistema final habrá que multiplicar por la matriz de escalado siguiente: • La matriz final de cambio de sistema es entonces: Y V U 0 0 ⎛1 / Lu ⎜ 1 / Lv 0 ⎛ 1 1 1 ⎞ ⎜ 0 ⎟ ⎜ S⎜ , , ⎟ = ⎜ 0 1 / Lw ⎝ Lu Lv Lw ⎠ ⎜ 0 ⎜ 0 0 0 ⎝ X 0⎞ ⎟ 0⎟ 0⎟ ⎟ 1 ⎟⎠ ⎛ 1 1 1 ⎞ M = T (− a,−b,−c) ⋅ R ⋅ S ⎜⎜ , , ⎟⎟ ⎝ Lu Lv Lw ⎠ Ejemplo … continuación Ejemplo … continuación Ejemplo