Tema 4 - Transformaciones 3D

Anuncio
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
Descargar