16
Todos nós estudamos matrizes no segundo grau. Entretanto, a maioria de nós faz isso se perguntando qual é a sua utilidade, e o porquê de tantos cálculos. O que muitos não sabem é que são justamente as matrizes as grandes responsáveis por todos os gráficos 3D dos jogos atuais. Que tal ler esse artigo e descobrir o como? Coordenadas cartesianas Você deve estar lembrado que sempre que desenhamos coisas usamos para isso um sistema coordenado, chamado de coordenadas cartesianas. Ele foi inventado por Renatus Cartesius, mais conhecido no Brasil como René Descartes. Nesse sistema, cada ponto é representado em 2D por um par de valores, indicando sua linha e sua coluna: Você pode imaginar que embaixo desse sistema de coordenadas hipotético, está uma folha de papel, ou mesmo o monitor do seu computador. Tanto faz. O importante é sabermos que, as coordenadas exatas dos pontos são apenas uma referência, uma convenção. Por exemplo. Digamos que giraremos a folha de papel em 20 o no sentido horário, e então iremos colocá- la por cima da folha anterior, e redesenhar o carro, exatamente no mesmo local, por cima de sua “sombra”. Obteríamos a seguinte imagem:

Matriz de rotação no plano

Embed Size (px)

Citation preview

Page 1: Matriz de rotação no plano

Todos nós estudamos matrizes no segundo grau. Entretanto, a maioria de nós faz isso se perguntando

qual é a sua utilidade, e o porquê de tantos cálculos. O que muitos não sabem é que são justamente as

matrizes as grandes responsáveis por todos os gráficos 3D dos jogos atuais. Que tal ler esse artigo e

descobrir o como?

Coordenadas cartesianas

Você deve estar lembrado que sempre que desenhamos coisas usamos para isso um sistema

coordenado, chamado de coordenadas cartesianas. Ele foi inventado por Renatus Cartesius, mais

conhecido no Brasil como René Descartes. Nesse sistema, cada ponto é representado em 2D por um par

de valores, indicando sua linha e sua coluna:

Você pode imaginar que embaixo desse sistema de coordenadas hipotético, está uma folha de papel, ou

mesmo o monitor do seu computador. Tanto faz. O importante é sabermos que, as coordenadas exatas

dos pontos são apenas uma referência, uma convenção.

Por exemplo. Digamos que giraremos a folha de papel em 20o no sentido horário, e então iremos colocá-

la por cima da folha anterior, e redesenhar o carro, exatamente no mesmo local, por cima de sua

“sombra”. Obteríamos a seguinte imagem:

Page 2: Matriz de rotação no plano

Sem dúvida, não houve qualquer modificação no desenho do carro, ele está exatamente no mesmo local.

Entretanto, no novo sistema de coordenadas, ao ajeitarmos a folha, esse carro pareceria ter girado 20o no

sentido anti-horário, veja:

O que fizemos no final, ajeitar a folha, é um processo chamado de transformação de coordenadas.

Simplesmente pegamos as coordenadas que estavam num sistema (o da folha girada) e as

transformamos elas num outro sistema (o da folha normal).

E o que matrizes têm a ver com tudo isso? Tudo.

Representação matemática do sistema de coordenadas

Considere um sistema de coordenadas qualquer, ainda com duas dimensões, e que sobre ele utilizemos

vários pontos pra traçar uma figura.

Page 3: Matriz de rotação no plano

Sabemos que o ponto superior direito dessa figura deve ter uma coordenada positiva de grande valor,

como (100,120) ou (10,12) e o seu valor exato não nos importa agora.

A figura por ter sido construída aí, segue uma regra: ela é proporcional a esse sistema. Ou seja, se a

figura tem 5cm de largura e 6cm de altura, e a unidade desse sistema for o milímetro, então, o canto

superior direito dessa figura será (50,60)mm.

Agora, imaginemos os eixos coordenados dessa figura como dois vetores, chamados vetores de base e,

como seu tamanho, atribuiremos o valor um. Novamente, o tamanho os pontos da figura não importam, e

sim o fato deles serem equivalentes de 1:1 com esse nosso eixo:

Vamos escrever cada um desses valores em uma tabelinha?

Ordenadas (x) Abscissas (y)

X 1 0

Y 0 1

Note como os valores, destacados com cores, foram transportados para as colunas da tabelinha. Se

retirarmos os títulos, acabaremos com uma matriz que representa esse nosso sistema de coordenadas.

Page 4: Matriz de rotação no plano

Se você lembrar-se das suas aulas do segundo grau, se lembrará que esta é a matriz identidade. Ela tem

uma propriedade interessante: qualquer matriz multiplicada pela identidade, não altera seu valor. Ou seja,

é como se essa matriz representasse o número um numa multiplicação. Como sabemos, qualquer coisa

multiplicada por um não altera seu valor.

Procure se lembrar dessa informação. Ela será importante em breve.

Vetores e matrizes

Você deve se lembrar que vetores podem representar pontos. Não se lembra? Então confira rapidamente

nosso artigo sobre vetores.

Por exemplo, o ponto do canto superior direito daquela figura que no exemplo calculamos ser (50,60),

poderia ser representado pelo seguinte vetor:

O que muitos não sabem, é que esse vetor pode ser representado como uma matriz de uma linha, e duas

colunas, como essa aqui:

Ou mesmo como uma matriz de uma única coluna e duas linhas, como essa: Como a notação de

coluna é difícil ocupa muito espaço escrita, podemos usar a notação de linha, através da matriz

transposta: [50 60]T.

Você deve estar se perguntando. E daí? Se você ainda não reparou, uma vez que um vetor é

representado por uma matriz, isso também significa que ele pode ser multiplicado por uma matriz. E essa

multiplicação permite-nos transformar um vetor que está num sistema de coordenadas qualquer, em um

vetor em outro sistema.

Usar linhas ou colunas tem uma implicação importante: Matrizes linhas representam o sistema de

coordenadas da mão esquerda. Nele, as funções de rotação funcionam no sentido horário, e as

transformações ocorrerão na ordem em que são multiplicadas. Na matriz coluna, as rotações ocorrem

em sentido anti-horário, e as transformações ocorrem em ordem inversa da multiplicação. Utilizaremos

nessa série de artigos as matrizes colunas, pois são padrão em muitas APIs e livros de computação

gráfica, por serem adotadas na OpenGL.

Já as matrizes linha são comumente usadas no DirectX, não é à toa que estão presentes em nossos

artigos de XNA e shaders.

Page 5: Matriz de rotação no plano

Multiplicação de matrizes

Antes de continuarmos, vamos lembrar como se dá a multiplicação de matrizes. Ao multiplicar duas

matrizes A e B, calculamos cada elemento Cij (onde i é a linha e j a coluna) usando de um processo

simples:

Na matriz A, pegamos os elementos da linha i, que queremos calcular;

Na matriz B, pegamos os elementos da coluna j, que queremos calcular;

Então, multiplicamos esses elementos entre si, e somamos os seus produtos. Note que para que essa

multiplicação seja possível, o número de colunas de A, deve ser exatamente igual ao número de linhas de

B.

Ainda perdido? Veja abaixo como calculamos o elemento c24:

Se você como eu sempre se perde nesses cálculos. Eis uma forma mais gráfica de representar: desenhe

a matriz C, e sobre ela a matriz B e a sua esquerda a matriz A. Os elementos usados para calcular um

valor em C estarão na mesma linha em A, e na mesma coluna em B, observe:

Agora que revisamos, vamos voltar ao tema.

Transformações lineares

Escala

Podemos usar matrizes para representar outros eixos coordenados, diferentes do eixo de base. Basta,

para isso, imaginarmos como esse eixo seria.

Por exemplo, vamos supor que queiramos ampliar uma imagem em duas vezes. Isso significa que

queremos que seu eixo de base seja duas vezes maior que nosso próprio eixo, certo?

Page 6: Matriz de rotação no plano

Portanto, usando as proporções do segundo eixo como uma matriz, teríamos:

Com essa matriz, podemos transformar qualquer ponto do sistema de base, num ponto do sistema

escalado. Para isso, a matriz de escala e multiplicar pelo vetor que queremos ampliar. Tomemos como

exemplo o nosso vetor [50 60], citado anteriormente:

Não surpreendentemente, os pontos dobraram de valor. Para ampliar uma figura inteira, multiplicaríamos

o vetor que representa cada um de seus pontos. Se você está achando que é muito trabalho para pouco

resultado, continue lendo o artigo.

Rotação

Alterar o tamanho não é a única coisa que podemos fazer com transformações lineares. O que

aconteceria se no lugar da matriz usássemos a matriz ?

Veja um eixo sobre o outro:

Page 7: Matriz de rotação no plano

Note que agora não só alteramos o tamanho da imagem, como também alteramos a inclinação dos eixos.

Como conseqüência, a transformação final também será inclinada (nesse caso, em 26o).

Se lembrarmos da formula sobre como criar um vetor baseado num ângulo, poderemos facilmente chegar

a uma matriz, que faz uma rotação qualquer. Se você não se lembra, criamos um vetor de tamanho t,

baseado num ângulo α com a função:

?

1

2

3

4

5

6

Vector2D Vector2D::bySizeAndAngle(float size, float angle)

{

return Vector2D(

cos(angle) * size,

sin(angle) * size);

}

Ou seja, equivalente à formula:

Se na hora de montar nosso novo sistema coordenado esse for o vetor de um dos eixos, então, seu vetor

perpendicular a ele, será o vetor do outro eixo. Há uma regra simples para achar um vetor perpendicular.

Basta inverter a posição dos dois valores, e o sinal do de um deles. Por exemplo, se o vetor em questão é

(x,y) seu perpendicular será (-y, x).

Dessa forma, como queremos alterar apenas o ângulo, teremos t = 1, e formamos seguinte sistema em

azul, sobre nosso sistema base, em cinza:

Page 8: Matriz de rotação no plano

E com isso, podemos deduzir a matriz de rotação genérica, que é:

Repare bem que a primeira linha dessa matriz é exatamente a fórmula do método

Vector2D::bySizeAndAngle. E note que a segunda, nada mais é que seu vetor perpendicular.

Assim, se tivermos um vetor (x,y) qualquer, sua rotação será definida por:

A fórmula acima te causa arrepios? Dê uma olhada no método rotate da classe Vector2D. Reconhece

essa fórmula?

?

1

2

3

4

5

6

7

8

9

10

11

12

13

Vector2D& Vector2D::rotate(float angle)

{

float s = sin(angle);

float c = cos(angle);

float newX = x * c - y * s;

float newY = x * s + y * c;

x = newX;

y = newY;

return *this;

Page 9: Matriz de rotação no plano

}

Transformações combinadas

Um detalhe interessante. Você pode ter notado que ambas as matrizes de transformação podem ser

multiplicadas umas pelas outras. Porém, essa operação faria sentido? O que ocorreria se

multiplicássemos uma matriz por outra?

A resposta é que obteríamos uma terceira matriz que realiza as duas operações ao mesmo tempo.

Se isso não parece muito interessante, vamos calcular um pouco. Suponha que você tenha uma figura

formada por 2000 pontos. Se você aplicar individualmente a rotação e a escala, terá feito 4000 operações

(2000 rotações e 2000 escalas). Porém, se você primeiro multiplicar as matrizes, fará ao final apenas

2001 operações: a primeira será a multiplicação da matriz de rotação R, pela matriz de escala E, obtendo

a matriz composta C. E em seguida, 2000 multiplicações dos vetores dos pontos por C.

Ou seja, você pode ter dezenas de transformações, que elas impactarão muito pouco no tempo total de

cálculo.

Um detalhe importante: Lembre-se que a multiplicação de matrizes não é comutativa. Portanto, a ordem

que a multiplicação dessas matrizes ocorre afeta o resultado. Veremos exemplos disso no próximo artigo.

Concluindo

Nesse artigo, vimos que matrizes representam um papel importante na computação gráfica. Elas são

usadas para transformar coordenadas de um sistema qualquer em outro. No artigo, vimos às

transformações lineares, que são capazes de fazer rotação e escala em qualquer eixo.

Vimos também que matrizes graficamente podem representar um sistema de coordenadas, proporcional

a outro sistema qualquer, chamado de sistema base. E, principalmente, vimos como entender essas

matrizes de maneira gráfica.

No próximo artigo, abordaremos também as transformações afins (AffineTransforms), que acrescentam a

operação de afastamento (translação).

Matriz de rotação

Origem: Wikipédia, a enciclopédia livre.

Ir para: navegação, pesquisa

Page 10: Matriz de rotação no plano

Rotação e pseudorrotação de um vetor no espaço bidimensional. A rotação preserva a norma

(comprimento) do vetor, a pseudorrotação não. A rotação é representada por uma matriz

unitária, a matriz de rotação. Uma pseudorrotação é representada por uma matriz não

unitária.

Interpretação da matriz de rotação como determinante de uma mudança de referencial. Na

figura o vetor (preto, ao centro) tem coordenadas distintas no sistema XY (vermelho) e no

sistema X'Y' (preto) - que diverge do sistema inicial por um ângulo . Conhecido , a

matriz (ver texto) permite o cálculo de .

Uma matriz de rotação é uma matriz quadrada que, quando aplicada sobre a

representação matemática de vetor - a matriz coluna - tem o efeito de mudar a direção

do vetor por ela representado mas não a sua magnitude; fazendo-o assim fisicamente

revolver em torno de um eixo de rotação definido pelos elementos da matriz; por um

valor angular também por eles especificado. O resultado da operação é uma segunda

matriz coluna que encerra as coordenadas do vetor resultante da rotação Ref. 1 .

Matrizes de rotação são unitárias e não alteram a norma do vetor. Se uma matriz não

estiver contudo normalizada, essa pode, além de rotacionar o vetor, também afetar seu

módulo. Embora essa matrizes também impliquem rotações (ou melhor,

pseudorrotações), o uso de matrizes não normalizadas a fim de representar rotações

puras é contudo coibido ao exigir-se a unitariedade da matriz de rotação.

A rotação de um vetor implica na modificação de suas projeções sobre os eixos

coordenados, e conforme apresentada dá-se em um sistema de coordenadas específico e

único (figura à esquerda). A situação física associada pode contudo ser igualmente

compreendida não dessa forma; mas sim como uma mudança de referencial estabelecida

Page 11: Matriz de rotação no plano

entre dois sistemas de coordenadas com origens comuns, mas que tenham seus eixos

coordenados não coincidentes; via diferenças providas por uma rotação em torno do

mesmo eixo de rotação, e pelo mesmo valor angular, antes associados à rotação do

vetor. A rotação do eixos coordenados é feita contudo em sentido contrário ao sentido

de rotação do vetor na primeira interpretação. Nesse segundo cenário (figura acima, à

direita) o vetor permanece imóvel no espaço, e o sistema de coordenadas é que gira Ref. 1

.

Frente à ultima interpretação, a matriz de rotação é entendida como uma matriz de

mudança de referencial entre dois referenciais ortonormais que, embora não transladem

entre si, giram um em relação ao outro.

O uso de uma ou outra interpretação é facultativo, sendo para todos os efeitos

equivalentes.

Índice

[esconder]

1 Considerações iniciais 2 Propriedades 3 Duas dimensões 4 Três dimensões 5 Ver também 6 Notas 7 Referências 8 Ligações externas

Considerações iniciais[editar]

Imagem de um crânio em rotação (clique sobre a figura). Em vermelho, a mandíbula. Imagens

como essas são produzidas em programas que implementam matrizes de rotação em seus

algoritmos.

Page 12: Matriz de rotação no plano

As matrizes de rotação buscam em princípio representar, em linguagem matemática,

operações físicas reais associadas às rotações de objetos, geralmente extensos e sólidos,

em um dado espaço dimensional, geralmente o espaço tridimensional.

Assumindo-se, em uma visão ativa, um objeto tridimensional em rotação conforme

observado a partir de um referencial fixo, inercial, com origem e sistema de

coordenados definidos segundo um sistema cartesiano dextrogiro ortonormal, todas as

possíveis rotações pelo corpo fisicamente implementáveis integram o que se designa

normalmente por rotações próprias. Qualquer rotação própria é factualmente

implementável pelo objeto em questão.

Matematicamente é possível, contudo, implementar-se uma "visão especular" de tais

rotações, propriamente falando uma inversão; o que fisicamente consistiria em algo

parecido a, partindo-se do objeto real, implementar-se uma operação de rotação própria,

impondo-se agora contudo que o observador visualize a configuração final do objeto

não diretamente mas sim através de um espelho, fazendo-o de forma a situar os reais

pontos em observação sempre às suas costas. Todas as coordenadas de um dado ponto

em observação aparecem, assim, invertidas (com sinais negativos justapostos) na

situação final; sendo qualquer ponto visualizado 180o aquém de sua real posição em

relação a origem.

Uma operação de rotação seguida de inversão não é fisicamente implementável pelo

objeto em virtude da quebra de quiralidade diretamente envolvida na transformação de

inversão. A mão direita nunca pode ser na prática rotacionada - seja qual for a rotação

fisicamente implementável pensada - de forma a sobrepor-se precisamente à mão

esquerda, pois essa corresponde à sua reflexão especular.

Rotações seguidas de inversão são conhecidas como rotações impróprias; e não são

fisicamente implementáveis mediante rotações do objeto apenas. Matrizes que

representam rotações impróprias são facilmente identificáveis pois implicam, no sistema

de coordenadas dextrogiro previamente estabelecido, matrizes com determinantes cujos

sinais são sempre o negativo (-1) das matrizes que representam as rotações próprias

(+1).

Rotações impróprias são também descritas por matrizes que, por muitos autores, são

também chamadas matrizes de rotação. Contudo a expressão "matriz de rotação"

implica, para a maioria dos autores, apenas as matrizes que representam rotações

próprias; e nesses termos é que se define, aparte exceções explícitas, uma matriz de

rotacão nesse artigo.

Matrizes de rotação encontram enorme aplicação na Física, fazendo-se sempre presentes

na descrição da dinâmica de corpos extensos, da matéria e mesmo da energia; em

engenharia; em química, e em qualquer área onde a representação de algum objeto

físico se faça necessária. Desempenha importante papel também na área de informática,

sobretudo na elaboracão de programas conhecidos genericamente pelas siglas CADs,

CNCs, e outros. Particularmente na área de multimédia o uso das matrizes de rotação

faz-se de extrema importância, sendo nesse caso também muito úteis as matrizes que

representam rotação impróprias. Certamente os que possuem em seu computador uma

placa de tv já viram, entre as opções de configuração do programa de controle, a opção

"espelhar imagem"; que permite, com um clicar de botão, a inversão da imagem gerada

na tela do monitor.

Page 13: Matriz de rotação no plano

Propriedades[editar]

Projeção no espaço tridimensional de uma rotação simples de um objeto no espaço

quadridimensional. A dimensionalidade de uma matriz de rotação não precisa,

matematicamente, ater-se às três dimensões espaciais conhecidas.

Em se tratando de rotações próprias no espaço tridimensional, verifica-se que:

é uma matriz de rotação se e somente se for ortonormal.

é ortonormal se o conjunto de seus vetores-coluna (e por tal o conjunto de seus

autovetores) formar uma base ortonormal de ; ou seja, se os produtos escalares

entre os vetores-coluna da matriz, tomados dois a dois, resultarem todos em zero

(ortogonalidade); e o produto escalar de qualquer dos vetores-coluna com ele mesmo for

unitário (normalização).

Como se trabalha no espaço dos reais, os elementos da matriz de rotação são também reais.

A matriz que representa uma sequência de rotações iguala-se ao produto das matrizes que representam as sucessivas etapas, na ordem adequada; e é também uma matriz de rotação (Teorema de Euler). Uma rotação "A" posteriormente seguida por uma rotação "B" implica:

Rotações finitas não são comutativas, e assim também não o é o produto de matrizes de rotação:

A inversa da matriz de rotação é sua transposta:

Page 14: Matriz de rotação no plano

; onde é a matriz identidade Ref. 1 .

O traço de uma matriz de rotação é função do ângulo de rotação a ela associado, e iguala-se à soma de seus autovalores.

No espaço tridimensional:

Ref. 1

No espaço bidimensional:

O determinante de uma matriz de rotação é igual à unidade:

As operacões representadas pelas matrizes de rotação permitem associá-las a um grupo de simetrias, o grupo de simetrias SO(n), n correspondendo à dimensão; SO(3) no caso tridimensional. Admitida a inclusão das matrizes que representam rotações impróprias (determinante = -1), tal grupo de matrizes formam uma representação do grupo de simetrias O(3). O "S" no primeiro grupo, SO(n), representa pois uma parte especial (do inglês "special") - um "subgrupo" - do grupo O(n).

Duas dimensões[editar]

Em duas dimensões, a rotação pode ser definida por um único ângulo, . Por

convenção, ângulos positivos representam rotação dos vetores no sentido horário, ou

dos eixos coordenados no sentido anti-horário Ref. 2 Ref. 1 Nota 1 . O eixo de rotação nesse

caso (o eixo Z) reside fora do espaço em consideração.

A matriz para rotacionar um vetor coluna em coordenadas cartesianas

sobre a origem a fim de se obter (ver figura) é:

Ref. 2 Ref. 1

de forma que:

Três dimensões[editar]

Page 15: Matriz de rotação no plano

As matrizes de rotação são importantes no estudo da dinâmica de corpos rígidos extensos.

Em três dimensões, uma rotação pode ser univocamente definida por três ângulos,

sendo geralmente utilizados os três ângulos de Euler, . De forma alternativa e

equivalente, em acordo com o Teorema de Euler, uma rotação pode também ser

definida por um único ângulo de rotação em torno de um eixo de rotação especificado

por um vetor unitário, , vetor que, além do eixo, também especifica, mediante a

regra da mão direita e a convencão de sinais para os ângulos aqui adotada, o sentido da

rotação dos eixos coordenados Nota 1 .

Se a representação der-se mediante os ângulos de Euler na convenção X - que implica

três rotações sucessivas; a primeira em torno do eixo Z do sistema de corrdendas inicial

(ângulo ); a segunda em torno do eixo X' do sistema resultante da rotação anterior

(ângulo ) - eixo esse que define a chamada linha de nodo; e a terceira em torno do

eixo Z'" do sistema definido após a segunda rotação (ângulo ) - a matriz que permite

determinar o vetor coluna resultante, em coordenadas cartesianas, escreve-se como o

produto das três matrizes individuais que representam, cada qual, uma das rotações

citadas. Em termos matemáticos, , onde:

; ;

.

A matriz completa, resultante da multiplicação das anteriores na ordem apresentada Nota

2 , é Ref. 1 :

Page 16: Matriz de rotação no plano

Em termos do vetor unitário que define o eixo de rotação no sistema

de coordenadas inicial, a matriz que expressa uma rotação do sistema de coordenadas

em torno desse vetor em sentido condizente com a regra da mão direita (ou do vetor em

sentido contrário), escreve-se como:

[carece de fontes?]

Na matriz acima, a fim de garantir-se as unitariedades do vetor e da matriz

, deve-se sempre ter, obrigatoriamente:

Comparando-se as duas representações anteriores, pode mostrar-se que as três rotações

sucessivas implicadas pelos ângulos de Euler correspondem, ao fim, a uma única

rotação por um ângulo em torno de um único e adequado eixo de rotação tal

que:

Ref. 1

ou, de forma mais explicita:

devendo-se nesse caso escolher o arco entre as possíveis soluções adequado à situação

física em consideração.