Computação Gráfica
Rodrigo Toledo
Transformações
Geométricas
Índice
•
•
•
•
•
•
Exemplos de Transformações 2D
Fórmulas e cálculos das transformações 2D
Usando matriz de transformação (por que?)
Coordenadas Homogêneas
Concatenação de transformações
Transformações 3D
Exemplos de Transformações 2D
• Translação
• Escala
– uniforme
– não uniforme
• Rebatimento por um eixo (espelhamento)
• Troca de eixos
• Rotação pela origem
Translação
Translation of a point is simply vector addition
y
-2
P2 = P1 +
-1
P1
P2
x
1
2
=
3
3
-2
+
-1
Escala
Scaling about the origin is scalar multiplication
y
2
2
P2
1
=2*
1
P1
x
P2 = P1 * 2
Rebatimento por um eixo
(espelhamento)
x=x
y = -y
Troca de Eixos
x=y
y=x
Rotação pela Origem
y
P´ =
q
x´
y´
P
=
x
y
x
x´ = x.cos q - y.sen q
y´ = x.sen q + y.cos q
Por que usar Matriz nas
Transformações?
• Todas as transformações podem ser efetuadas
através da multiplicação de matrizes (usando
coordenadas homogêneas).
• As transformações podem ser aninhadas e
resolvidas de modo a haver apenas uma matriz de
multiplicação a ser aplicada.
• A característica descrita acima se torna muito
importante quando a mesma seqüência de
transformações deve ser aplicada para diversos
pontos.
Multiplicação de Matrizes
 x’   a
 =
  
 y’   c
onde:
x’ = a x + b y
y’ = c x + d y
b


d
 x 
 
 
 y 
Uniform Scaling
 s
S=
0
0
,
s
 s
 0
 1
I=
0
0
,
1
 x 
P =  ,
y 
M=SP
0   x  s x 
   =  
s   y  s y 
M = s I P,
 x 
M=s 
 y 
Non-uniform Scaling
 s1
S = 
0
M=SP
0

s2 
 x 
P= 
 y 
 s 1
 0

0   x   s 1
  = 


s2   y  s2
Note orientation shift in line
x
y
Non-uniform Scaling
y
P
=
x
y
P´ =
x´
y´
Redução (0< sx <1) ,
Aumento (sy >1)
=
x
x´
y´
sx
0
0
sy
x
y
Flip an Axis...
 x   1
 =
 -y   0
0  x 
  
-1  y 
What does this do to appearance of objects?
Swap Axes
 y   0
 =
 x  1
1  x 
  
0  y 
Rotate by q
cos( q )
M = R P, R = 
 sin( q )
cos( q ) x - sin( q ) y

=


sin( q ) x + cos( q ) y
q
-sin( q )
, P =

cos( q ) 
cos( q )


 sin( q )
 x 
 
 
 y 
-sin( q )  x 
 
 
cos( q )   y 
Transformações Geométricas
(Translação)
y
P’
t
P
=
P’ =
tx
x’
y’
=
x
y
+
tx
ty
ty
x
x´
=
y´
x´
y´
=
?
?
1
0
x
?
?
0
1
Não pode ser
escrito na forma
y
x
y
+
tx
ty
Ruim para
implementação


Vantagens das coordenadas homogêneas
(Translação)
w
y
x
t
w=1
yh
xh
P’
=
x’
y’
x’
=
y’
=
1
1
0
tx
x
0
1
ty
y
0
0
1
1
[T]
Matriz de Translação
Coordenadas homogêneas
y
P
P
=
x
wx
x
D
=
y
D
wy
=
y
x = xh /w
w
w>0
y = yh /w
w
yh
=
w
1
x
xh
y
x
Ex.:
w=1
yh
3
2
xh
6
3
D
=
2
1
D
=
4
2
9
=
6
3
Vantagens das coordenadas homogêneas
(pontos no infinito)
w
H1
w
2
u =
y
x
3
H2 = C2
C1
w=1
C3
H3
u
w=1
yh
uh
xh
2
3
0
=
?
?
uh
H1
H2
H3
H4
2
2
2
2
3
3
3
3
2
1
1/2
1/4
C1
C2
C3
C4
1
2
4
8
1.5
3
6
12
2
...
3
0
infinito
na
direção
(2,3)
Vantagens das coordenadas homogêneas
(pontos no infinito, exemplo)
D
y
A
1
1
O
2
3
0
-2
0
1
0
1
0
0
y
A’
1
O’
x
infinito
-1
D’
1
-1
2
B’
B
x
C’
C
3
0
-2
1
0
1
0
1
1
0
0
1
3
0
-2
1
0
1
0
-1
1
0
0
1
3
0
-2
2
0
1
0
2
1
1
0
0
1
2
1
1
3
0
-2
2
4
2
0
1
0
-2
1
0
0
1
1
=
=
1
-1
1
J
J
4
=
=
2
-2
2
2
=
=
1
-1
1
J
J
x
y
y
x
Efeito de profundidade
Simplificação da projeção cônica
Projeção cônica
Projeção ortográfica
eye
plano de projeção
direção de projeção
plano de projeção
Concatenação
y
a
y
y0
y0
x
x0
y
x0
1 0 - x 0 


0 1 - y 0 
0 0
1 
y
cos a

 sin a

 0
- sin a
cos a
0
0

0
1

1 0 x 0 


0 1 y 0 
0 0 1 
a
x
 x '  1
  
 y '  = 0
 1  0
  
0
1
0
x
x
x0  cos a

y0   sin a
1

 0
- sin a
cos a
0
0 1

0 0
1

0
0
1
0
- x0   x 
 
- y0   y 
 
1 
1
Concatenação de Transformações
y
y
x
y
x
T1
y
T2
x
y
x
R1
y
R2
E
x
x
P’= T2 R2 E R1 T1 P
Composição com sistema
local/móvel
Y
Y
P
X
=
T
P1 =
Y

P1= T P e P2 = R P1
Y
Y
=
Y
X1
X
Y
R
P3 =
X
P3= R P e P2 = T’ P3  P2 = R T R-1 R P
X3
Y2
X
P2 = R T P
T’
Y
P2
Y3
X
X2
R
Y1
X
X
P
P2 =
T’ = R T R-1
ou
X
P2 = R T P
=
X2
Y2
Geometria Projetiva e
Coordenadas Homogêneas em 3D
P’
y
P
xh
yh
zh
w
x
z
P’ =
=
x’
xh /w
y’ = yh/w
z’
zh/w
m11
m21
m31
m41
m12
m22
m32
m42
m13
m23
m33
m43
m14
m24
m34
m44
x
y
z
1
P=
x
y
z
Transformações em 3D
(translações e escalas)
y
x
z
x’
1
0
0
tx
x
y’
0
1
0
ty
y
0
0
1
tz
z
1
0
0
0
1
1
x’
sx
0
0
0
x
y’
0
sy
0
0
y
0
0
sz
0
z
0
0
0
1
1
z’
z’
1
=
=
Transformações em 3D
(Rotações)
y
z
1
0
0
0
x
y’
0
cos qx
0
y
0
sen qx
-sen qx
cos qx
0
z
1
0
0
0
1
1
x’
cos qy
0
0
0
x
0
y
-sen qy
0
0
0
cos qy
0
z
0
0
1
1
0
0
x
0
1
0
y
0
z
0
1
1
z’
qy
qz
x’
qx
=
x
y’
z’
=
1
x’
cos qz
y’
sen qx
z’
1
=
0
0
sen qy
1
-sen qx
cos qx
0
0
Transformações em 3D
(rotação em torno de um eixo qualquer)
x’
m11
y’
m21
z’
z
=
1
m12
m13
0
x
m22
m23
0
y
m31
m32
m33
0
z
0
0
0
1
1
v = (vx, vy, vz)
y
x
m11
m12
m13
m21
m22
m23
m31
m32
m22
= vx2 + cosq (1- vx2)
= vxvy(1-cosq ) - vz sen q
= vzvx(1-cosq ) + vy sen q
= vxvy(1-cosq ) + vz sen q
= vy2 + cosq (1- vy2)
= vyvz(1-cosq ) - vx sen q
= vxvz (1-cosq ) - vy sen q
= vyvz(1-cosq )+ vx sen q
= vz2 + cosq (1- vz2)
Download

Document