Computação Gráfica
Transformações Geométrica no Plano e
no Espaço
Tomás Antônio C. Badan
1
Pontos e Vetores

Ponto: Posição especificada por uma coordenada em um sistema de referência


Depende do sistema de coordenadas
Vetor (http://pessoal.sercomtel.com.br/matematica/geometria
/vetor2d/vetor2d.htm): 
Classe de objetos matemáticos (segmentos) com a mesma direção, mesmo sentido e mesmo módulo (intensidade).

Propriedades são independentes de quaisquer sistema de coordenadas
2
Pontos e Vetores (2)
3
Propriedades dos Vetores

Vetor unitário → v = V/|V|
 ∣= Vx 2 Vy 2 Vz 2
∣V

Módulo do vetor → 
V(Vx, Vy) = [Vx Vy] = Vx.i + Vy.j

Produto Escalar ou Interno

V.W = Vx.Wx + Vy.Wy = |V||W|cosӨ


Se (Vx, Vy), ortogonais: (Vy, ­Vx) ou (­Vy, Vx)
Representação:
Vetor Linha : V =[Vx Vy Vz ]
ou
[]
Vx
Vetor Coluna : V = Vy
Vz
4
Vetores e Matrizes


Vetores → matriz de 1 coluna ou de 1 linha
Matriz → tabela de m x n símbolos, representada sob a forma de um quadro com m linhas e n colunas
5
Definições

Multiplicação de Matrizes → A.B possível se nA = mB





Matriz Resultante → mA x nB
Matriz Quadrada → m = n
Matriz Identidade (I) → matriz quadrada, onde aij = 1 se i = j e aij = 0 se i  j
T
Matriz Transposta (A ) → aij = aji
­1
­1
­1
Matriz Inversa (A ) → A.A = A .A = I
6
Exemplos
A matriz adjunta de uma matriz quadrada A é a transposta
da matriz que se obtem substituindo cada termo Ai,j pelo
determinante da matriz resultante de retirar a A a linha i e
a coluna j (isso é, o determinante menor) multiplicado por
( − 1)i + j (isso é, alternando os sinais).
7
Observação sobre Vetores e Matrizes

O produto vetorial entre dois vetores V e W produz um terceiro vetor que é ortogonal aos anteriores


Magnitude = área do paralelogramo formado por V e W
obedece a regra da mão direita entre V e W
∣
∣
k
i
j
 =V
 xW
 = Vx Vy Vz =
 ∣∣W∣sen

U
u∣V
ø
Wx Wy Wz
onde i , j e k , vetores unitários nos eixos x , y e z ,respectivamente
8
Observação sobre Vetores e Matrizes (2)
Considere o seguinte sistema de equações :
x ' =a.xb.y
y ' =c.xd.y
Pode ser descrito pela notação de vetor coluna :
x ' = a b x  P ' =C.P
c d y
y'
ou pela notação de vetor linha :
a c
[ x ' y ' ]=[ x y ]
 P ' =P.C T
b d
[ ] [ ][ ]
[ ]
Note que trocar de uma notação pela outra , envolve alterar
a ORDEM DA MULTIPLICAÇÃO e aplicar a TRANSPOSTA
sobre a matriz de coeficientes.
9
Observações sobre a Notação

O sistema vetor linha era usado pelos primeiros sistemas gráficos e por alguns autores


Livro adotado usa essa representação
Representação vetor coluna é a representação matemática padrão

Utilizado pelo OpenGL, Java, PHIGS ...

Será a utilizada durante o curso.
10
Sistemas de Coordenadas

Coordenadas Cartesianas


Coordenadas Polares


2D
Coordenadas Cilíndricas


2D, 3D
3D
Coordenadas Esféricas

3D
11
Coordenadas Cartesianas
12
Coordenadas Polares
13
Coordenadas Cilíndricas
14
Coordenada Esférica
15
Sistema de Referências

Sistemas utilizados para finalidades específicas:

Sistema de Referência do Universo (SRU)

Sistema de Referência do Objeto (SRO)

Sistema de Referência da Câmera (SRC)

Sistema de Referência Normalizado (SRN)

Sistema de Referência do Dispositivo (SRD)
16
Sistema de Referência do Universo (SRU)

Coordenadas do universo ou do mundo




Descreve os objetos em termos de coordenadas utilizadas pelo usuário
Cada tipo de aplicação especifica o seu universo de trabalho
Pode estar em metros, kilômetros, milímetros, etc → depende da aplicação
Pode estar em qualquer sistema de coordenada

Possui limites máximo e mínimo
17
Sistema de Referência do Objeto (SRO)



Cada objeto é um miniuniverso individual
Suas particularidades são descritas em função de seu sistema de referência
Normalmente, o centro do sistema de coordenadas é o seu centro de gravidade, ou eixo de rotação

Em sólidos, o centro é conhecido como pivô
18
Sistema de Referência da Câmera (SRC)

Caso particular do SRO

Coordenadas são normalmente especificadas em uvn
19
Sistema de Referência Normalizado (SRN)

Trabalha com as coordenadas normalizadas:

Alguns utilizam o intervalo entre 0 e 1



0 ≤ x ≤ 1; 0 ≤ y ≤ 1; 0≤ z ≤ 1
Alguns sistemas utilizam o intervalo ­1 a 1
É um sistema de referência intermediária entre o SRU e o SRD

Principal aplicação é tornar a geração de imagens independente do dispositivo de saída
20
Sistema de Referência do Dispositivo (SRD)

Utiliza coordenadas que podem ser fonecidas diretamente para um dado dispositivo de saída



Ex. se for vídeo, pode ser valor de pixels (640x480, 800x600, ...)
Se for uma impressora, o tamanho do papel
Geralmente, depende da resolução possível e da configuração do usuário, dentro de um conjunto possíveis de configurações
21
Transformações entre Sistemas de Coordenadas

Conversões entre sistemas de coordenadas


Ex. cartesiano para polar

r = sqrt(x*x + y*y)

Ө = arctan(y/x)
Transformações entre sistemas de referências

SRU e SRO

SRC e SRU

SRN e SRD

etc
22
Exemplo
23
Transformações sobre Pontos e sobre Objetos

Translação

Escala

Rotação

Reflexão

Cisalhamento

Transformações entre sistemas de referências
24
Translação

Movimentar o objeto

Transladar todos os pontos que compõem um objeto


Somente os pontos que o define completamente
É uma alteração de corpo rígido

Não deforma o objeto transladado
[ ][ ][]
Tx
x ' =T x x
x'
x
y ' =T y  y temos que : y ' = T y  y , ou seja , P ' =T P
z'
z
Tz
z '=T z z
{ }
25
Translação (2)
26
Escala

Altera as dimensões do objeto

Multiplica cada ponto do objeto por um fator de escala


{
Podem ser escalas diferentes em cada eixo cartesiano, por exemplo.
Se não estiver na origem, causa translação
x ' =Sx∗x
y ' =Sy∗y
z ' =Sz∗z
}
[ ][
][ ]
x'
Sx 0 0 x
em notação matricial : y ' = 0 Sy 0 y
z'
0 0 Sz z
portanto , P ' =S∗P
27
Escala (2)

Não é uma alteração de corpo rígido

Deforma o objeto transformado
28
Em openGL

Translação:


Escala:


glTranslate[fd](X, Y, Z);
glScale[fd](X, Y, Z);
Matriz Identidade

glLoadIdentity();

Permite inicializar o sistema de matrizes
29
Rotação
30
Rotação (2)
x=r.cos ø
y=r.sen ø
x ' =r.cos ø ß=r.cos øcos ß −r.sen ø sen  ß 
y ' =r.sen ø ß =r.sen ø cos ßr.cos ø sen ß
x ' = x.cos  ß − y.sen  ß 
y ' =y.cos  ß x.sen  ß 
[ ][
][ ]
x ' = cos ß −sen ß x , ou seja , P ' =R.P
sen  ß  cos ß  y
y'
onde ß  ângulo de rotação
31
Rotação (3)
32
Rotação (4)

Se objeto não está na origem, rotação implica também em translação

Para rotacionar um objeto em torno de um determinado ponto → transladar ponto P (objeto) para a origem, rotacionar, transladar de volta para o ponto P


Princípio aplicado a todas as transformações que envolvem translação implícita
Pode ser realizadas várias operações em cascata aplicando o mesmo princípio
33
Translação + Rotação + Translação

Alteração de corpo rígido pode ser feita pela alteração inversa no sistema de coordenada

Girar um objeto ø equivale a rotacionar o sistema de coordenada ­ø
34
Rotação em 3D

Realizada individualmente sobre cada eixo, usando os ângulos de Euler


Rotaciona­se o plano (2D) em torno do eixo que é normal a este plano
Eixos ortogonais → eixos perpendiculares entre si


Regra da mão direita → define um sistema de eixos positivos. Padrão
Regra da mão esquerda → define um sistema de eixos negativos. Ex. monitores
35
Rotação em 3D (2)
36
Ângulos de Euler

Rotações:

no eixo X → ângulo 

no eixo Y → ângulo 

no eixo Z → ângulo 
37
Rotação em 3D (3)
Eixo Z  Rotação plano XY  
Eixo X  Rotação plano YZ  
Eixo Y  Rotação plano ZX  
[ ][
[ ][
[ ][
][ ]
][ ]
][ ]
cosa −sena 0 x
x'
y ' = sen a cosa 0 y
0
0
1 z
z'
1
0
0
x'
x
y ' = 0 cos ß  −sen  ß  y
0 sen  ß  cos ß  z
z'
cosd  0 sen d  x
x'
0
1
0
y' =
y
−sen d  0 cosd  z
z'
38
Rotação em 3D ­ Observações

Todas as matrizes anteriores são ortonormais

Ortogonais e normalizadas



Se uma das linhas, ou colunas, forem considerados vetores unitarios → teriam comprimento = 1
Produto escalar ou interno entre vetores seria igual a zero (ortogonais)
Inversa = transposta (somente matrizes ortonormais)

I = M.M­1 = M.MT
39
Rotação em 3D – Observações (2)

Rotação em 3D → combinação de rotações definidas pelo ângulo de Euler

Dependente da ordem como é feita as rotações

Operação conhecida como concatenação


Executada pela multiplicação de matrizes
Exemplo: Rotação no eixo X, depois no eixo Y e depois no eixo Z:



P' = Rz(Ry(Rx.P)) ← Note a ordem das matrizes.
A notação está em vetor coluna, se for em vetor linha → P' = ((P.Rx)Ry)Rz)
P' = Rz.Ry.Rx.P ≠ Rx.Ry.Rz.P
40
Multiplicação de Matrizes no OpenGL

Dada a matriz M = A.B.C.D, podemos obtê­
la de duas formas:

Pré multiplicação


M' = D → M'' = C.M' → M''' = B.M'' → M = A.M'''
Pós multiplicação

M' = A → M'' = M'.B → M''' = M''.C → M = M'''.D

Política adotada no OpenGL
41
Multiplicação de Matrizes no OpenGL ­ Exemplo
Deseja−se fazer uma rotação ,um escalonamento e , por fim ,
uma translação sobre um ponto P , ou seja :
P '=T.S.R.P
em OpenGl :
glLoadIdentity ; inicializa o sistema de matrizes
glTranslatef Tx ,Ty ,Tz ;
glScalef Sx , Sy , Sz ;
glRotatef ø , Rx , Ry , Rz;
Note que a primeira operação sobre o ponto é a última a ser especificada
42
Rotação em 3D – Método 2

Considere que:

É dado um vetor A = (Ax, Ay, Az)


Unitário → a = A/|
A|
É dado um vetor B = (Bx, By, Bz) 
Aproximadamente ortogonal a A
43
Método 2 (2)
:
temos que : vetor ortonormal a a e B
 a x B

C=

C
c = =c x , c y , c z 
∣C∣
vetor ortonormal na direção aproximada de B  b ' :
b '=c x a =b ' x , b ' y , b ' z 
Portanto , matriz de rotação :
[
ax b ' x c x
R= a y b ' y c y
az b ' z cz
]
44
Método (2) ­ Exemplo
Rotação no eixo X de um ângulo ø
a =1, 0, 0
 =b=0, cosø , senø
B
logo ,
i
j
k
c =a x b= 1
0
0
0 cosø sen ø
c =0,−senø , cosø
Portanto , matriz de rotação no eixo X :
∣
[
1
0
0
R= 0 cosø −senø
0 senø cosø
∣
]
45
Em openGL

Rotação é definida em torno de um vetor V:


glRotate[fd](ø, x, y, z);
Onde ø é dado em graus (sentido contrário ao ponteiro do relógio)
46
Reflexão

Espelhar o objeto em um dos eixos, ou em ambos


Em 2D → reflexão horizontal (eixo X) ou vertical (eixo Y)
Em 3D → reflexão sobre os planos (XY, YZ ou ZX)
Reflex ão no plano ZX
[ ][
1
0
x'
y ' = 0 −1
0
0
z'
0
0
1
][ ]
x
y
z
Reflexão no plano ZX e YZ
[ ][
][ ]
−1 0 0 x
x'
y ' = 0 −1 0 y
0
0 1 z
z'
47
Reflexão (2)
48
Em OpenGL


Basta utilizar o comando para escalonar um objeto, com parâmetros negativos
Exemplo:

glScalef(­1, 1, 1)


Reflexão no plano YZ
Tomar cuidado com a orientação das faces, para que uma face externa não se torne uma face interna

Ordem dos pontos na definição de triângulos ou quadriláteros
49
Cisalhamento

Distorce o formato do objeto

Desloca­se uma coordenada, proporcional ao(s) valor(es) da(s) outra(s) coordenada(s)
x ' = xSh.y

y'=y
z'=z
[ ][
[ ][
][ ]
][ ]
1 Sh 0 x
x'
y' = 0 1 0 y
0 0 1 z
z'
x '=x
y ' =a.x yb.z 
z ' =z
1 0 0 x
x'
y' = a 1 b y
0 0 1 z
z'
50
Cisalhamento (2)
51
Coordenadas Homogêneas

Unifica as operações de cisalhamento, reflexão, rotação, escala e translação

Um ponto é expresso por 4 valores


Dois conjuntos representam o mesmo ponto se forem múltiplos


PhT' = [ x' y' z' M] → PT = [x y z] = [x'/M y'/M z'/M]
[2 3 4 6] = [4 6 8 12]
Se M = 1 → No sistema homogêneo [x y 1] equivale à [x y] no sistema cartesiano

O mesmo ocorre para matrizes
52
Coordenadas Homogêneas (2)
Rotação no eixo Z 
Escala 
][ ]
[ ][
[ ] [ ][ ]
[ ] [ ][ ]
cosa −sen a
x'
y ' = sen a cosa
0
0
z'
0
0
1
Sx 0 0 0
x'
y ' = 0 Sy 0 0
0 0 Sz 0
z'
1
0 0 0 1
Translação 
1 0
x'
y' = 0 1
0 0
z'
1
0 0
0
0
1
0
0
0
0
1
x
y
z
1
x
y
z
1
0 Tx x
0 Ty y
1 Tz z
0 1 1
53
Em OpenGL

Para cisalhamento não existe um comando específico

Deve especificar um buffer de 16 posições (matriz 4x4) ordenado pelas colunas da matriz
[
m11
m21
m=
m31
m41
m12
m22
m32
m42
m13
m23
m33
m43
]
m14
m24
,
m34
m44
em C :
GLdouble m [16]={m11 , m21 , m31 , m41 , m12 , m22 ,... , m24 , m34 , m44};
Não é a forma usual de se especificar uma matriz em C
54
Em OpenGL (2)

Substitui a matrix atual pela matrix fornecida:


glLoadMatrix[fd](m)
Multiplica a matrix atual com a matrix especificada:

glMultMatrix[fd](m)
55
Transformação entre Sistemas de Coordenadas 2D

De SRO → SRU
56
Transformação entre Coordenadas 2D – Método 1
[
cosø −senø 0
Rotacionar por ø  R X ' Y ' , XY = sen ø cosø 0
0
0
1
]
[ ]
1 0
Transladar por  x 0 , y 0  T X ' Y ' , XY = 0 1
0 0
x0
y0
1
M X ' Y ' , XY =T X ' Y ' , XY . R X ' Y ' , XY
57
Transformação entre Coordenadas 2D – Método 2
1 °− Aplicando a Rotação :
Conhecendo as coordenadas de V em XY :

P1− P0
V
=v x , v y 
v = =
 ∣ ∣P − P ∣
∣V
1
0
vetor ortogonal a v  u =v y ,−v x =u x , u y 
[ ] [ ][ ]
[ ] [ ][ ]
a b 0 x'
x
y = c d 0 y'
0 0 1 1
1
aplicando o vetor unitário 0,1 de X ' Y ' direção de v 
vx
a b 0 0
b=v x
vy = c d 0 1 
d=v y
0
0
1
1
1
58
Transformação entre Coordenadas 2D – Método 2 (2)
Aplicando o vetor unitário1,0de X ' Y ' direção de u 
[ ] [ ][ ]
[ ]
[ ][ ] [
ux
a b 0 1
a=u x
=

c d 0 0
uy
c=u y
0 0 1 1
1
ux vx 0
logo R X ' Y ' , XY = u y v y 0
0 0 1
1 0
M X ' Y ' , XY =T X ' Y ' , XY . R X ' Y ' , XY = 0 1
0 0
x0 ux vx 0
ux v x
y0 . uy vy 0 = uy v y
1
0 0 1
0 0
x0
y0
1
]
59
Transformação entre coordenadas 2D – SRU → SRO

Processo inverso ao descrito anteriormente
60
SRO → SRU
Sabemos que :
−1
P=M X ' Y ' , XY . P '  M −1
.
P=M
X ' Y ' , XY
X ' Y ' , XY . M X ' Y ' , XY . P '
logo : P '=M −1
X ' Y ' , XY . P=M XY , X ' Y ' . P
M XY , X ' Y ' =R XY , X ' Y ' .T XY , X ' Y '
onde :
[ ]
[ ]
ux uy 0
T
R XY , X ' Y ' =R X ' Y ' , XY = v x v y 0
0 0 1
e
1 0 −x 0
T XY , X ' Y ' = 0 1 −y 0
0 0 1
61
Transformações entre Sistemas de Coordenadas ­ 3D
Generalizado e assumindo que os vetores 
u , v e w
 são conhecidos
no sistema XYZ em  x 0 , y 0 , z 0  , são ortonormais e dados por :
u =u x ,u y , u z 
v =v x , v y , v z 
w
 =w x , w y , w z 
M XYZ , X ' Y ' Z ' =R.T
onde :
[
ux uy uz
vx vy vz
R=
wx wy wz
0 0 0
0
0
0
1
] [ ]
e
1
0
T=
0
0
0
1
0
0
0 −x 0
0 −y 0
1 −z 0
0 1
62
Sistema de Matrizes no OpenGL

Matrizes usadas:

GL_MODELVIEW, GL_PROJECTION e GL_TEXTURE.


Se extensão ARB_imaging é suportada, também é usada a GL_COLOR
Para fazer a modelagem (rotação, escalonamento e translação)

GL_MODELVIEW


Especificada através do comando: glMatrixMode(modo);
63
Empilhamento de Matrizes

Permite salvar a matriz atual para uso posterior:

Operações realizada na contexto da placa de video



Mais eficiente do que transferir da memória para a placa
glPushMatrix(); → copia a matriz em uso na pilha
glPopMatrix(); → restaura o conteúdo da pilha na matriz atual

Descarta o valor que estava na pilha
64
Exemplo
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(posT[0][0], posT[0][1], posT[0][2]);
glRotatef(posT[2][0], 1, 0, 0);
glRotatef(posT[2][1], 0, 1, 0);
glRotatef(posT[2][2], 0, 0, 1);
glPushMatrix();
glTranslatef(0, -60*escala, 0);
glScalef(escala, escala, escala);
glCallList(prism);
glPopMatrix();
// descarta o objeto atual
glTranslatef(0, 60*escala, 0);
glScalef(-escala, -escala, escala);
glCallList(prism);
glPopMatrix();
65
Download

matriz transposta