Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
6. Transformaes Geomtricas
Este captulo comea com uma reviso das transformaes lineares no plano e evolui para
transformaes no espao homogneo. A lgebra desenvolvida no espao homogneo
suficiente para dar suporte s operaes de modelagem de forma e movimento, exceto as
rotaes no espao. Para elas se faz necessrio o estudo de quatrnios, conforme ser
mostrado no final do captulo.
Apesar de iniciar com uma reviso de conceitos conhecidos dos cursos de lgebra Linear,
este captulo evolui para assuntos que so tratados apenas nos cursos de Computao
Grfica. A reviso importante para estabelecer as ligaes entre a lgebra e a
Computao Grfica.
Para facilitar a visualizao dos processos geomtricos envolvidos, vamos iniciar o nosso
estudo de transformaes no R2. Como ilustra a Fig. 6.2, uma transformao T no R2 uma
funo que associa a cada ponto p do plano um novo ponto p' tal que:
p' = T (p ) (6.1a)
ou:
x' x
'= f (6.1b)
y
y
y y
x
P =
y x
P =
y
x x
2
Fig. 6.2 Transformao no R .
a transformao
T (p) = Mp (6.3)
onde M uma matriz e p um vetor uma transformao linear, uma vez que o produto de
matrizes tem a seguinte propriedade:
M (a1p1 + a2 p 2 ) = a1Mp 1 + a2 Mp 2 (6.4)
Inversamente, podemos tambm dizer que toda transformao linear pode ser escrita como
o produto de uma matriz por um vetor. Ou seja:
A transformao T Linear T(p)= Mp
Para determinar a matriz associada basta observar que:
x 1 0 1 0
T (p) = T = T ( x + y ) = xT + yT (6.5)
y 0 1 0 1
Se tomarmos:
1 a 0 c
T = e T = (6.6)
0 b 1 d
temos
a c a c x
T (p) = x + y = (6.7)
b d b d y
Ou seja, a matriz de uma transformao linear aquela cujas colunas so as coordenadas
dos vetores da base transformada.
Como no utilizamos na derivao acima nada que seja especfico do R2, ento esta
propriedade geral, ou seja, ela vale para toda transformao linear sobre um espao
vetorial qualquer. No R3, por exemplo, esta matriz pode ser determinada por:
1 0 0
M = T 0 T 1 T 0 (6.8)
0 0
1
b x
a=
y
c x
x
a=
y
Fig. 6.3 Transformao de escala no R2.
x
p' = x
y p=
y
x
Fig. 6.4 Transformao de espelhamento no R2.
A rotao de um ngulo em torno da origem pode calculada com base na Fig. 6.5 por
meio das seguintes frmulas trigonomtricas:
sin( + ) = sin cos + cos sin (6.12a)
cos( + ) = cos cos - sin sin (6.12b)
y x
p' =
y
r
x
r p =
y
x
cos sin
[M ] =
sin cos
sin
T (j) =
cos cos
T (i) =
j sin
i x
Este problema de mudana de uma base ortonormal para outra rodada bastante comum na
Computao Grfica e por isto merece ser melhor elucidado. Os vetores unitrios das
direes u e v so os vetores i e j rodados de -. Ou seja, se colocarmos as suas
coordenadas nas colunas de uma matriz, estamos representando a rotao de -. Para
obtermos a matriz de rotao basta que tomemos a transposta, ou seja, a matriz com as
coordenadas de u e v colocadas como linhas. Assim:
u u x u y x
= (6.16)
v vx v y y
A propriedade expressa na equao (6.6) geral para qualquer espao vetorial e pode ser
enunciada da seguinte maneira: a matriz que transforma as coordenadas de um vetor
qualquer escrito numa base ortonormal para outra a matriz obtida colocando-se como
linhas as coordenadas dos vetores da segunda base escritos na primeira.
y y v
p'= x
y
x x u
p = p = ou
y y v
x x
y y
x x
Fig. 6.8 Transformao de cisalhamento em x.
y y
c
c'
a x a' x
b
plano de projeo
b'
Fig. 6.9 - Exemplo da necessidade da transformao de cisalhamento.
Sh x (30 0 )
1 0.5773
0 1
R ( 530 )
0.601112 0.799165
R (37 0 ) - 0.799165 0.601112
0.799165 - 0.601112
0.601112 0.799165
S
0.752176 0
0 1.329476
t x
y t =
t y
x x
Fig. 6.11 - Translao no R2.
Esta transformao no linear porque no preserva a origem, isto , a transformada do
vetor zero t, que diferente de zero. Conseqentemente a translao tambm no pode ser
escrita na forma:
x' a c x
=
y ' b d y
com a, b, c e d constantes reais. A forma matricial com matrizes 22, comumente
apresentada no estudo de transformaes lineares afins1, :
x' 1 0 x t x
= + (6.21)
y ' 0 1 y t y
Esta forma tem o inconveniente de complicar a composio de transformaes. Isto porque,
se duas transformaes lineares so dadas por M1 e M2, a sua composta dada
simplesmente por M3 = M2 M1. J se a transformao for do formato p1=M1p+t1 e
p2=M2p1+t2, a composta p2=M3p+t3 tal que M3 = M2 M1e t3= M2t1+t2. Se
continuarmos a compor as transformaes a expresso da translao vai se complicando
mais ainda.
Espao homogneo
1
O termo transformao linear afim vem do termo em ingls afine linear transformation, que tem o
sentido de uma transformao aparentada com a linear. As transformaes lineares afins so transformaes
lineares acrescidas da translao.
Podemos tratar a translao de vetores do R2 como uma transformao linear de pontos que
esto no plano w=1 associando a cada ponto deste plano sua coordenada incrementada das
coordenadas do vetor t, como ilustra a Fig. 6.12. A seguinte transformao linear:
x' 1 0 t x x
y ' = 0 1 t y (6.22)
y
1 0 0 1 1
descreve a translao que o ocorre no plano w=1. Note que os pontos que esto
inicialmente neste plano permanecem nele. Isto continua valendo para transformaes mais
gerais, desde que a ltima linha da matriz permanea [0 0 1].
Devemos observar que, para qualquer ponto do R2 com coordenadas (x, y)T, existe um
nico ponto no sistema homogneo dado por [x, y, 1]T e vice-versa. Esta associao de um
para um, denominada homeomorfismo ou isomorfismo, permite que matrizes 33 possam
representar transformaes do R2 e matrizes 44 representem transformaes do R3. Para
evitar confuses entre um vetor homogneo do R2 e um vetor cartesiano do R3, que tambm
tem 3 coordenadas, adotamos a notao [ ] para os homogneos e ( ) para os cartesianos.
w
y
x t
w=1 yh
xh
Fig. 6.12 - Imerso do R2 no sistema homogneo xh, yh e w.
Esta base homognea permite um mesmo tratamento algbrico para as transformaes
lineares e para as translaes. O produto de matrizes modela a composio destas
transformaes.
transformao pode ser escrita como uma composio de uma translao do centro de
rotao para a origem seguida de uma rotao em torno da origem e, finalmente, uma
translao do centro de volta para sua posio original, como mostra a Fig. 6.13.
y y
y0 y0
x0 x x0 x
1 0 x0
1 0 x0
0 1 y0 0 1
0 0 y0
1
y y 0 0 1
cos sin 0
sin cos 0
0 0 1
x x
Fig. 6.13 - Composio de transformaes escritas em coordenadas homogneas.
Note que o produto de matrizes no comutativo, ABBA, o que tambm se reflete nas
transformaes geomtricas associadas. O que torna o problema um pouco confuso a
ordem de leitura de texto normal, da esquerda para a direita que corresponde ordem
inversa em que as transformaes so aplicadas. Para colocar ambos na mesma ordem, os
primeiros textos de Computao Grfica escreveram as equaes matriciais transpostas, ou
seja, os vetores eram linhas e multiplicavam as matrizes pelo lado esquerdo. Com o tempo,
a notao convencional da Matemtica acabou prevalecendo e a ordem de leitura para
transformaes deve ser a ordem de multiplicao do vetor, da direita para a esquerda.
x
x
z
z
Fig. 6.14 Rotaes em torno dos eixos cartesianos.
y x
y
j' i '
i ' i
k '
x
k ' y
z j = j' k z
Fig. 6.15 Rotao em torno do eixo y.
As coordenadas cartesianas dos vetores da base cannica depois da rotao so dadas por:
cos y 0 sin y
i ' = 0 , j' = 1 e k ' = 1
sin 0 cos
y y
y y
j' j'
i ' i '
x k ' x
k ' x
z
z z
1 0 0 cos z sin z 0
i ' = 0 j' = cos
x k ' = sin x i ' = sin j' = cos z k ' = 0
0 sin cos
z
0 1
x x 0
(a) Rotao em torno do eixo x (a) Rotao em torno do eixo z
brao
ante-brao
(a) objeto padro no espao do modelo (b) objetos instanciados no espao da cena
Fig. 6.17 Instanciao de objetos num brao mecnico simples.
Antes de prosseguirmos com a discusso de como instanciar objetos que obedecem uma
hierarquia, vamos esclarecer as questes de ordem e de interpretao geomtrica das
composies de transformaes.
A Fig. 6.18 mostra um exemplo simples que procura enfatizar o fato de que a ordem das
transformaes altera o resultado. Nesta figura os vrtices de um quadrado sofrem uma
2
Usamos aqui a nomenclatura do brao humano para facilitar a referncia s partes do brao mecnico no
texto.
translao e uma rotao. Na Fig. 6.18a a rotao ocorre antes da translao e na Fig. 6.18b
ocorre a ordem inversa. Os resultados so claramente diferentes. Esta diferena tambm
aparece na formulao matricial. As opes a e b da Fig. 6.18 tm as seguintes expresses
algbricas:
p 2 = TRp (6.27a)
ou:
p 2 = RTp (6.27b)
Como o produto de matrizes no comutativo, estas equaes produzem, em geral,
resultados diferentes.
x
y x y p 2 = 2
p1 = 1 y2
y1
T
R x x
y x
p = (a)
y
x
x p 2 = 2
y x
y y2
T p1 = 1
y1
x R x
(b)
Fig. 6.18 Ordem das transformaes.
Por que o resultado equivalente? Acontece que no caso da Fig. 6.18b p2=RTp, enquanto
no caso da Fig. 6.19 p2=TLRp. Para provar que a posio de p2 a mesma em ambas as
figuras preciso mostrar que TLR=RT. Isto pode ser verificado se notarmos que uma
translao na direo xL pode ser escrita como sendo a concatenao de 3 transformaes:
(i) rotao que roda o eixo xL para que ele fique alinhado com o eixo x (R-1 ), (ii) translao
em x (T), e (iii) rotao de volta para a posio original de xL (R). Ou seja, TL = RTR1.
Sendo assim TLR = RTR1R=RT, como queramos mostrar. Em geral a transformao em
um sistema de eixos transformado obtida pela concatenao da transformao de eixos
inversa, a transformao do objeto e a transformao de eixo original. Quando estas trs
matrizes multiplicam a transformao original, ocorre a mesma inverso da ordem
mostrada no exemplo. Ou seja, apesar de nossa argumentao ser especfica para
problemas de rotao seguida da translao, o caso geral pode ser demonstrado de forma
semelhante.
Com a idia de eixos locais, a instanciao de objetos para compor o brao mecnico
simples mais fcil de ser organizada. Considere os eixos locais colocados no esqueleto do
brao mecnico como mostra a Fig. 6.20. A partir dos eixos xyz a cinemtica do brao
mecnico pode ser descrita seguindo a ordem dos objetos, como ilustra o Quadro 6.1.
y3 d2
y4 y3 d2
z3 y4
d1 x3 z4 z3
z4
x5 z y5 x3
y2 x4 5 d1
x4 x5 z5 y5
z2 y2
z2 x6
y x2 x2
y
y1 y1
x1 x1
z z1 x z z1 x
Sistemas grficos como o OpenGLTM trabalham com o conceito de matriz corrente para
tratar as transformaes que levam do espao do modelo para o espao da cena. Desta
forma apenas uma matriz fica armazenada no sistema grfico para esta funo. Todos os
vrtices das primitivas que esto sendo definidas so transformados por ela. O sistema
grfico fornece funes para iniciar e alterar esta matriz. No OpenGLTM esta matriz
chamada de matriz de modelagem e visualizao (model view) e as transformaes so
acumuladas direita. Ou seja, ao fornecermos ao sistema uma nova matriz M, ela
multiplicada pela esquerda pela matriz corrente C e a nova matriz corrente assume o valor
CM. Geometricamente isto significa que a transformao M ocorre antes das
transformaes acumuladas em C. Isto bastante conveniente para a forma de instanciar
objetos descrita acima. Considere, por exemplo, o procedimento do brao mecnico
simples ilustrado no Quadro 6.1. Este quadro se traduz diretamente no seguinte trecho
cdigo OpenGLTM:
glMatrixMode(GL_MODELVIEW); /* transformaes do modelo */
glLoadIdentity( ); /* carrega a identidade como corrente */
desenhaBase( );
glRotatef(ry, 0.,1.,0.); /* roda em y */
glRotatef(rz1, 0.,0.,1.); /* roda em z1 */
glTranslatef(0.,d1/2,0.); /* translada em y1 */
desenhaAnteBraco( );
glTranslatef(0.,d1/2,0.); /* translada em y1 */
desenhaCotovelo( );
glRotatef(rz3, 0.,0.,1.); /* roda em z3 */
glTranslatef(0.,d2/2,0.); /* translada em y3 */
desenhaBraco( );
glTranslatef(0.,d2/2,0.); /* translada em y3 */
glRotatef(rz5, 0.,0.,1.); /* roda em z5 */
desenhaPulso( );
desenhaMao( );
Quadro 6.2 Trecho de cdigo OpenGL para o brao mecnico simples.
palma
tipo pai atravs de mecanismos de push e pop na pilha. O Quadro 6.3 mostra uma funo
para desenhar os dedos esquerdo e direito a partir da transformao corrente em x7y7z7.
Note que neste caso simples poderamos acumular as transformaes indo do centro do
dedo esquerdo ao centro do dedo direito, mas o mecanismo de pilha torna o cdigo mais
claro. Ele tambm importante para implementarmos funes que possam ser utilizadas
em vrios programas. Com o mecanismo de push e pop na pilha podemos garantir que a
funo retorna sem alterar o estado corrente das transformaes, ou seja, sem efeitos
colaterais indesejados.
void desenhaDedos( float b, float c, float f, float f)
{
/* dedo esquerdo */
glPushMatrix(); /* Salva matriz corrente C0 */
glTranslatef((f+e)/2,(b+c)/2,0.); /* C=CTesq */
glScalef(e,c,e); /* C=CS */
glutSolidCube(1.0);
glPopMatrix(); /* Recupera da pilha C=C0 */
/* dedo direito */
glPushMatrix(); /* Salva matriz corrente C0 */
glTranslatef((f+e)/2,(b+c)/2,0.); /* C=CTdir */
glScalef(e,c,e); /* C=CS */
glutSolidCube(1.0);
glPopMatrix(); /* Recupera da pilha C=C0 */
}
Quadro 6.3 Funo exemplo de uso de push e pop.
[I ] (t )
0 , (6.29b)
1
[M ] (t )
0 , (6.29c)
1
respectivamente. Nesta equao, I a matriz identidade.
A equao (6.30c) representa uma transformao linear M seguida de uma translao. Isto
porque:
[I ] (t ) [M ] (0) [M ] (t )
0 = (6.30a)
1 0
1 0 1
Caso a ordem fosse inversa teramos:
[M ] (0) [I ] (t ) [M ] (Mt )
0 = (6.30b)
1 0
1 0 1
Como esperado, a ordem influi no resultado e as matrizes so diferentes. No caso (6.30b) a
translao no pode ser lida diretamente da ltima coluna da matriz. Ela est transformada
pela a rotao que foi aplicada depois.
Como a ltima linha das matrizes das transformaes lineares afins uma linha do tipo
[0...0 1] e estas matrizes mantm os pontos do plano w=1 dentro dele mesmo, sabemos
que, por exemplo, dado um ponto qualquer do R2, [x y 1]T, sua transformada
necessariamente um ponto da forma [x y 1]T. Por isto alguns sistemas grficos usam
matrizes 23 ou 34 para especificar uma transformao linear afim no R2 ou R3 . A ltima
coluna fica implicitamente definida como sendo [0 0 1]T ou [0 0 0 1]T. Ou seja, s uma
forma econmica (ainda que s vezes confusa) de escrever matrizes que so de fato 33 ou
44.
Rotaes no Espao
Poderamos imaginar que qualquer rotao no espao pode ser especificada por trs ngulos
compondo as trs rotaes em torno dos eixos cartesianos. Seguir por este caminho requer
alguns cuidados. Primeiramente, as rotaes no comutam, ou seja, o efeito de duas
rotaes seguidas depende da ordem em que elas so aplicadas. Considere por exemplo a
coruja da Fig. 6.22. Suponha que desejemos aplicar sobre ela um vetor de rotao (90o , 0,-
90o). Ou seja, rodaramos de 90o em torno do eixo x e de -90o em torno do eixo z. Observe
que a posio final seria completamente diferente se aplicamos a rotao na ordem xz ou na
ordem zx.
Algum poderia argumentar que bastaria definirmos uma ordem para as rotaes para
eliminarmos as ambigidades. Por exemplo, rodaramos sempre em torno do eixo x, depois
em torno do eixo y e, finalmente, em z. Assim, por exemplo, a coruja de cara para baixo
seria representada pelo vetor rotao (90o, 90o, 0). Para visualizar este vetor, considere
como passar da coruja deitada de lado aps a rotao de 90o em x mostrada na Fig. 6.22
para a posio final desejada (veja a linha tracejada).
z = 90o x = 90o
y = 90 o
x = 90o z = 90 o
Esta perda de um grau de liberdade tambm pode ser vista algebricamente na matriz de
rotao dada pela equao (6.31). Se atribuirmos y=90 a matriz se reduz para:
0 0 1 0
s c cx sz sx sz + cxcz 0 0
R ( x ,90 , z ) = x z
o
c x c z + sxsz cx s z s x cz 0 0
0 0 0 1
Utilizando as frmulas da trigonometria que tratam do seno e do co-seno da diferena de
ngulos (veja as equaes (6.12)) chegamos a:
0 0 1 0
sin( ) cos( ) 0 0
R ( x ,90 o , z ) = x z x z
cos( x z ) sin( x z ) 0 0
0 0 0 1
Esta matriz corresponde a uma rotao que no consegue tirar os braos do boneco do
plano onde ele est deitado. Existe apenas um grau de liberdade, apesar de especificarmos
dois valores.
Os ngulos de Euler apresentam outro problema srio: no so parmetros adequados para
interpolaes. Suponha, por exemplo, que desejemos interpolar o movimento do boneco
entre o quadro inicial e o quadro final mostrados na Fig. 6.24 b e c, respectivamente.
Algebricamente o vetor intermedirio deveria ser calculado por interpolao, gerando, por
exemplo:
0 0 0
0 0
0 45 90
90 0 450 0
A Fig. 6.24c ilustra esta posio intermediria. Note que a interpolao natural no traria
a cabea do boneco to para a frente, longe do plano vertical (verde na figura). Numa
animao, o natural seria ele rolar e cair sem que o eixo do corpo se afaste muito do plano
vertical (verde).
(a) original (b) quadro inicial (c) intermedirio (d) quadro final
Fig. 6.24 Posio inadequada de um quadro intermedirio.
y
x
Fig. 6.25 Rotao de p de em torno de gerando p'.
v = p = (p ( p) ) = p ( p) = p (6.38)
uma vez que a componente paralela no contribui no produto vetorial.
Substituindo as componente de p||, p e v na equao (6.35) temos:
p' = (e p) e + (cos )(p (e p) e ) + ( sen )(e p)) ` (6.39)
Re-arrumando os termos chegamos a:
p' = (cos ) p + (1 cos )( p) + ( sen )( p) (6.40)
Apesar de ser diretamente escrita em temos dos dados do problema, no podemos dizer que
esta equao seja prtica nem que a formulao seja elegante.
Uma maneira de se facilitar de uso o clculo da rotao em torno de um eixo qualquer
consiste em calcularmos a matriz da transformao correspondente. Para tanto, podemos
calcular cada coluna da matriz como a transformada dos vetores da base cannica. Sejam
p=(x,y,z)T e =(ex,ey,ez), a primeira coluna da matriz corresponde rotao do vetor ,
escrita como:
m11 1 ex 0 cos + (1 cos )e x2
m21 = cos 0 + (1 cos )e x e y + sin e z = e x e y (1 cos ) + e z sin (6.41a)
m 0 e e e e (1 cos ) e sin
22 z y x z y
Caso o eixo no passe pela origem, teramos que compor transformaes. Supondo que o
eixo passe pelo ponto p0 =(x0,y0,z0)T e tenha a direo e sentido de =(ex,ey,ez), como ilustra
a Fig. 6.26, a rotao final seria dada por:
x ' 1 0 0 x0 m11 m12 m13 0 1 0 0 x0 x
y ' 0 1 0 y0 m21 m22 m23 0 0 1 0 y0 y
z ' = 0 (6.43)
0 1 z 0 m31 m32 m33 0 0 0 1 z 0 z
w 0 0 0 1 0 0 0 1 0 0 0 1 1
ex ex
z = ey z = ey
e e
z z
p0 p0
y y
x 1 0 0 x0 x 1 0 0 x0
0 0 y0
1 0 y0 1 0
T= T1 =
0 0 1 z0 0 0 1 z0
0 0 0 1 0 0 0 1
ex ex
z z
= ey = ey
e M e
z z
p0 y p0 y
x x
Fig. 6.26 Rotao em torno de um eixo que no passa pela origem.
Quatrnios
A procura por uma forma algbrica simples e elegante para representar as rotaes no
espao foi um problema que ocupou os matemticos desde Euler (1707 1783). Em
1843, Hamilton estendeu os nmeros complexos, inventando uma estrutura algbrica,
chamada quatrnios, para atender a esta demanda. Em 1985, Shoemake introduziu os
quatrnios na Computao Grfica e hoje eles formam a base das implementaes de
animaes computadorizadas que envolvem rotaes no espao.
Um quatrnio, q, definido por quatro componentes:
q = s + xi + yj + zk (6.44)
sendo o escalar s a componente real e o vetor v=(x, y, z) a componente imaginria (a
exemplo dos complexos). Adotamos o sublinhado como notao para distinguir um
quatrnio de um vetor.
Uma forma mais compacta de escrever um quatrnio :
q = (s , v ) (6.45)
As operaes adio de dois quatrnios e multiplicao de quatrnio por escalar
seguem o esperado de um vetor de quatro dimenses:
q1 + q 2 = (s1 , v1 ) + (s 2 , v 2 ) = (s1 + s 2 , v1 + v 2 ) (6.46)
q1 q 2 = ( s1 s 2 v1 v 2 , s1 v 2 + s 2 v1 + v1 v 2 ) (6.52)
Apesar do produto interno de dois quatrnios ser completamente diferente do que o produto
de dois quatrnios, a diferena em notao sutil: o produto interno tem um ponto . e o
outro no. Com o produto interno definido podemos calcular a norma euclidiana e
perceber que ambas as normas esto relacionadas por:
2
n(q) = q (6.56)
Quatrnios e rotaes
A relao de quatrnios com rotaes no espao pode ser obtida da seguinte maneira:
1. Dada uma rotao definida por um eixo e um ngulo , construmos o quatrnio
unitrio:
q = cos , sin (6.60a)
2 2
2. Dado um ponto qualquer p do R3, construmos o quatrnio:
p = (0, p ) (6.60b)
3. Calculamos o produto:
1
p' = qpq (6.60c)
4. A parte real deste produto resulta em 0 e a parte imaginria corresponde ao vetor do
R3 rodado. Ou seja, o ponto rodado p' dado por:
p' = (0, p') (6.60d)
Um detalhe a ser observado que, como o quatrnio que representa uma transformao
unitrio, o quatrnio inverso simplesmente o conjugado, isto :
1 *
q = q
(6.61)
Para provarmos que o procedimento acima funciona necessrio provar que a componente
imaginria de
cos , sin (0, p ) cos , sin
2 2 2 2
resulta no mesmo vetor calculado pela equao (6.40). Esta prova extensa mas no
possui dificuldade e por isto deixada a cargo do leitor.
Com base na equao (6.60a) podemos elaborar uma pergunta importante: qual o quatrnio
corresponde rotao nula? A resposta pode ser obtida atribuindo-se zero para o ngulo de
rotao em torno de qualquer eixo. O quatrnio resultante
q = (1,0 ) = (1,0) = (1,0,0,0)
Se aplicamos este quatrnio na frmula (6.60c) vemos que p'=p.
Finalmente, a questo a ser levantada : se a complexidade da formulao por quatrnios
igual ou maior que a equao (6.40), por que ela se tornou to utilizada na Computao
Grfica? A resposta porque ela torna mais tratveis os problemas de composio e
interpolao de rotaes.
Composio de rotaes
ou
(q 2q 1 )p(q 2q 1 ) 1 (6.64b)
final de p depois de rodado pela rotao representada por q1 . A equao (6.64b) representa
Qual a rotao que colocaria o boneco diretamente deitado como mostra a Fig. 6.23b? A
resposta no intuitiva mas pode ser facilmente calculada por:
q 2 q 1 = ( 1
2
, 1
2
(0,1,0) )( 2
3
) (
, 12 (1,0,0) = 4
6
, 10
4 ( 1
5
, 3
5
, 1
5
) )
Ou seja, a rotao desejada de = 104.5 0 em torno do eixo = ( 1
5
, 3
5
, 1
5
) . A Fig. 6.27
mostra o resultado desta rotao ao lado do resultado da composio da rotao x = -60o
seguido de y = 90o.
Interpolao de rotaes
O problema de gerar quadros intermedirios entre duas posies rodadas de um objeto foi
ilustrado na Fig. 6.24, quando mostramos que a interpolao baseada em ngulos de Euler
apresenta movimentos indesejados.
Dados dois quatrnios q1 e q 2 que representam a posio inicial e final, podemos
q1 q (t )
q1
q(t ) = aq1 + (1 a )q 2
a [0,1]
(1-t)
q2 q2
(a) Linear: inadequada (b) esfrica: correta
Fig. 6.28 Interpolao de quatrnios.
Para ilustrar esta proposta considere o problema ilustrado na Fig. 6.24. Os quatrnios que
representam as rotaes (0,0,90) e (0,90,0) so dados por:
q 1 = (cos(45 o ), sin(45 o )(0,0,1) ) = ( 1
2
, 1
2
(0,0,1) )
(
q 2 = cos( 45 o ), sin( 45 o )( 0 ,1, 0 ) = ) ( 1
2
, 1
2
( 0 ,1, 0 ) )
O produto interno deles resulta em:
q 1 q 2 = ( 1
2
, ( 0 ,0 , 1
2
) )( 1
2
, (0, 1
2
,0 ) =) 1
2
possvel, temos que escolher o sinal de q1 ou q 2 de forma a minimizar o ngulo entre eles.
Quatrnios e matrizes
1 2( y 2 + z 2 ) 2 xy 2 zs 2 xz + 2 ys 0
2 2
2 xy + 2 zs 1 2( x + z ) 2 yz 2 xs 0
M q = (6.68)
2 xz 2 ys 2 yz + 2 xs 1 2( x 2 + y 2 ) 0
0 0 0 1
Inversamente, dada uma matriz de rotao qualquer da forma
m11 m12 m13 0
m m22 m23 0
21
m31 m32 m33 0
0 0 0 1
y y
sx=0.5
x x
Fig. 6.30 As normais no sofrem a mesma transformao que os pontos.
x
y
n p = a b c d = 0
T
(6.70)
z
1
Esta equao no se altera se inclumos a matriz identidade na forma de uma matriz M e da
sua inversa:
x
y
a b c d M M z = 0
1
(6.71)
1
Se M a matriz da transformao homognea da transformada que estamos tratando, os
pontos p so levados para:
x' x
y' y
p' = Mp ou = M (6.72)
z' z
w' 1
Substituindo esta equao na equao (6.71) temos:
x'
1 y '
a b c d z' = 0
M (6.73)
w'
Esta equao pode ser vista com a equao do plano transformada, n'p' = 0, se:
a' a
b'
T b
n' = M n ou
T
=M (6.74)
c' c
d ' d
De onde conclumos que, se M transforma os pontos, M-T transforma as normais. Note que
se a matriz M for ortonormal as duas matrizes so iguais.
Exerccios resolvidos
3 0 1
2 2
M= 0 1 0
1 3
2 0
2
Resposta:
Pela regra de Cramer a inversa de um matriz pode ser calculada por:
1
M 1 = M adj
det(M )
3 3
det(M ) = 2 1 2 + 0 + 0 ( 12 12 1 + 0 + 0) = 1
3 0 1 3 0 1
2 2 2 2
M adj = 0 1 0 M = 0
1
1 0
1 3 1 3
2 0 2 0
2 2
Examinando as colunas da matriz M vemos que a transformada da base cannica
consiste numa rotao de 30o em torno do eixo y, como ilustra a figura abaixo.
y
3 1
2 0
j=j'
2
M= 0 1 0 i' o
1 3 30
2 0
2 k i x
30o k'
i' k' z
Como a matriz de rotao ortonormal, a inversa a transposta. Ou, continuando o
raciocnio geomtrico, a inversa corresponde rotao de -30o que resulta na
mesma matriz, como ilustra a figura a seguir.
y
3 0 1 2
j=j' 2
M 1 = 0 1 0
i 1 3
2 0 2
k'
k 30o x
30o i'
z
Em ambos caminhos chegamos mesma resposta.
2. Mostre que a matriz, R, associada a uma rotao em torno de um eixo qualquer que
passa pela origem ortonormal, ou seja, RTR = RRT = I ou R-1 = RT.
Resp.:
O produto da matriz pela sua transposta pode ser interpretado como sendo o produto
interno entre os vetores da base cannica original:
i i j i k i 1 0 0
MM T = i j j j k k = 0 1 0 = I
i k j j k k 0 0 1
O produto da transposta pela matriz contm os produtos internos dos vetores da
base rodada:
i ' i ' j' i ' k ' i ' 1 0 0
M M = i ' j' j' j' k ' k ' = 0 1 0 = I
T
3. Um objeto que est numa posio A sofre uma rotao em torno do eixo y de 90o
chegando a uma posio B. A partir de B o objeto sobre outra rotao de 90o em
torno do eixo x chegando a uma posio C. Determine o eixo de uma rotao que o
leve diretamente de A para C.
Resp.:
Quatrnio correspondente primeira rotao:
2 2
q 1 = cos , sin = , (0,1,0)
2 2 2 2
Quatrnio correspondente segunda rotao:
2 2
q 2 = cos , sin = , (1,0,0)
2 2 2 2
Quatrnio correspondente rotao de A para C:
2 2 2 2
q 3 = q 2q 1 = , (1,0,0) , (0,1,0)
2 2 2 2
2 2 2 2 2 2 2 2 1 1
q 3 = 0, (0,1,0) + (1,0,0) + (0,0,1) = , (1,1,1)
2 2 2 2 2 2 2 2 2 2
1 3 1 1 1 120o 120o 1 1 1
q 3 = , , , = cos , sin , ,
2 2 3 3 3 2 2 3 3 3
1 1 1
Ou seja o eixo de rotao pedido : , ,
3 3 3
Exerccios
1) A que pontos do R2 correspondem as seguintes coordenadas homogneas?
12 8 12
p1 = 3 p 2 = 2 p 3 = 0
3 2 0
3
0 1 5
M = 1 0 1
0 0 1
45o 45o
a = (0,1)T
a a
x x
45 o
a c a' d'
x x
c'
x 1
1 (dx,dy)
1 x
10) Determine a matriz que transforma os pontos do plano R2 de forma que os objetos
rodem em torno do ponto (3,2)T de um ngulo de 90o graus no sentido horrio. Qual o
significado geomtrico das colunas desta matriz? Faa um desenho ilustrando este
significado geomtrico.
11) Determine o quatrnio que representa uma rotao de 30o em torno do eixo y.
12) Determine a matriz correspondente ao quatrnio do exerccio anterior utilizando a
equao (6.68).
13) Calcule posio do ponto p = (1,2,2) aps uma a rotao de 60o em torno do eixo que
passa pela origem e tem a direo do vetor (1,1,1) utilizando trs formulaes
diferentes. So elas: (a) matriz de rotao dada pela equao (6.42); (b) expresso
vetorial dada pela equao (6.40); e (c) pelo procedimento de quatrnios (veja (6.60)).
14) A Fig. 6.22 mostra trs fotos de uma coruja em trs posies diferentes. A foto da
esquerda mostra a coruja rodada de -90o em z. A foto da direita mostra a coruja rodada
de 90o em x. Finalmente, a foto do meio mostra a coruja rodada de aproximadamente
45o em x e -45o em z. Esta posio intermediria corresponde interpolao dos
ngulos de Euler. Calcule o ngulo e o eixo de rotao de uma posio intermediria
atravs da interpolao linear esfrica de quatrnios.