Você está na página 1de 10

Exemplos

Interseces geomtricas:

Geometria e
Programao Geomtrica

Como sabemos quando uma bola bate na parede?

Orientao
Como fazer com que um F1 aponte para os boxes?

Transformao

Captulo 5 (Foley & van Dam)

como desenhar o carro em diferentes instantes?

Mudana de coordenadas
como desenhar as rodas, uma de cada vez?
Carlos Hitoshi Morimoto (hitoshi@ime.usp.br)

Programao geomtrica
Existem muitas reas da Cincia da
Computao que exigem o uso de
entidades geomtricas
Computao grfica
CAD - computer aided design
Robtica
Viso computacional
GIS - geografic information systems

Geometria e CG

CG trabalha basicamente com a


geometria de linhas e objetos lineares
no espao 3D
Pois a luz viaja em linha reta

Reflexo e refrao

Programao independente de
coordenadas

Tradicionalmente um livro de CG introduz um sistema


de coords, vetores, matrizes, seguido por frmulas
que envolvem diversas matrizes 4x4.
Embora conveniente, se torna difcil "ver" o que
estamos programando.

Tony DeRose
desenvolveu um mtodo de programao geomtrica
independente de coordenadas, o que simplifica o
raciocnio geomtrico.
Ou seja, ao invs de matrizes, utilizaremos operadores
geomtricos de alto nvel (esses sim, so implementados
com matrizes)

Mas antes,

Geometria

um pouco de histria...

Afim

Geometrias

geo = terra, metria = medida

Agricultura, pirmides, etc...

Euclides: [sec 3 AC] formalizou a geometria a partir


de alguns axiomas (sem sistema de coords).

Sec 19: geometrias no Euclidianas [Lobachevski e


Gauss], sugerem outros sistemas onde se aplicam
outros axiomas.
Ns veremos:
afim,
euclidiana e
projetiva

Trata de coisas planas


No h noo de distncia, ngulo, ou
orientao
Elementos bsicos
escalares (nmeros)
pontos: usados para indicar uma posio
vetores livres: possuem direo e magnitude,
mas nenhuma posio
vetor nulo ou zero
Livre?

Descartes: [sec 17] introduz um sistema de coords,


permitindo que conceitos geomtricos fossem
expressos matematicamente.

Outras geometrias

Geometria Afim

Pontos x Vetores

Note que NO definimos um ponto especial,


ou ORIGEM para o espao afim.
No h pontos especiais
Por que distinguir pontos de vetores?
para tornar clara a inteno do programador
exemplo
escalar * vetor ( OK )
escalar * ponto (?)

Convenes

pontos: letras romanas maisculas


P e Q

faz sentido somar pontos?

vetores: letras romanas minsculas


em geral, sobrepostos com uma flecha
Mas vamos usar t, u e v

e multiplicar pontos por um escalar?

escalares: em geral, letra grega


Mas vamos usar e

Combinaes

Combinaes afins

Multiplicao por escalar


u = . v , ou u = v /
Adio de vetores
t = u + v ou t = u v

QuickTime and a
decompressor
are needed to see this picture.

Diferena entre pontos


v=PQ
Adio entre ponto e vetor
Q = P + v ou P = Q - v

Combinaes afims

Operaes afins

u+v

R+v

P-Q
R

Soma de
vetores

Subtrao
de pontos

Dado dois pontos Q e P, qual o seu ponto mdio R?


Mais genrico: qual o ponto R que divide PQ nas
propores e 1-? { sendo a entre [0,1]}

Soma de
ponto e vetor

Existe uma combinao particular entre pontos que


consideraremos vlida, denominada combinao
afim.

Solues
R = P + (Q - P)
R = (1 - )P + aQ

(escala de Q - P)
(mdia ponderada)

Combinao afim

Dada uma sequncia de pontos P1, P2, ,


Pn, uma combinao afim qualquer soma da
forma 1 P1 + 2 P2 + + n Pn

Exerccios

Onde a i(i) = 1

Dados 3 pontos tridimensionais no


colineares, qual a unio de todas as suas
combinaes afins?
Resposta: todo o plano contendo os 3
pontos
Qual a unio de todas as suas combinaes
convexas?
Resposta: o tringulo (incluindo o seu
interior) formado pelos 3 pontos.

Combinao convexa
uma combinao afim
onde todo
est no intervalo [0,1]

Notao

Vamos tomar a liberdade de escrever


expresses do tipo
(P + Q) / 2
para indicar o ponto mdio entre P e Q.

Que , claramente, ilegal!

Geometria
Euclidiana

A geometria afim no possui um mecanismo para tratar


ngulos e distncias.
A geometria euclidiana uma extenso da geometria
afim, que inclui o operador de produto interno (produto
escalar)
O produto interno de dois vetores resulta em um
escalar, e ser denotado <u.v>.

Propriedades do produto escalar

Ortogonalidade
u e v so ortogonais (ou perpendiculares) se <u.v> == 0

Positividade
<u.u> >= 0 e <u.u> == 0 iff u == 0;

nulo v, conveniente decompor u como a soma de dois


vetores u = u1 + u2, onde u1 paralelo a v e u2 ortogonal a v

Simetria
<u.v> == <v.u>
Bilinearidade
<u. (v+w)> == <u.v> + <u.w> e <u. v> == <u.v>
onde um escalar

Projeo ortogonal: dados um vetor u e um vetor no

u1 = v <u.v> / <v.v>

(pode-se ignorar <v.v> se |v| = 1)

u2 = u - u1

verifique que u2 ortogonal a v.

u1 chamado de projeo ortogonal de u sobre v.

Para saber mais, veja um livro de lgebra linear

Produto escalar

Produto escalar
<u.v> = (ui.vi)
Comprimento de um vetor
|v| = sqrt[ <v.v> ]

Produto Escalar

Sistema de Coordenadas
QuickTime and a
decompressor
are needed to see this picture.

Normalizao: dado um vetor no nulo v, a


normalizao de v resulta em um vetor de
comprimento unitrio, de mesma direo
v' = v / |v|

Distncia entre pontos


dist(P, Q) = |P - Q|

Sistema de coordenadas

ngulo entre 2 vetores no nulos:


=> ang(u,v) => cos-1( u.v / |u|.|v|) = cos-1(u' . v')
cos = <u'.v'>
Note que no sinal no ngulo entre u' e v', ou seja, se a
direo do ngulo horria ou anti-horria
Vamos voltar a falar sobre orientao quando o produto
vetorial for introduzido

Sistema de coordenadas o mecanismo


utilizado para a definio dos objetos
primitivos da geometria euclidiana (ponto,
vetor, etc)
Como representar pontos e vetores no
espao afim?
lgebra linear: uso de 3 vetores linearmente
independentes (i, j, k):
v = !!i + !!j + !!k

Combinao linear e base

Para representar pontos e vetores em um espao


d-dimensional, utilizaremos vetores de
comprimento d+1.

QuickTime and a
decompressor
are needed to see this picture.

Combinao linear

pontos tem a ltima coordenada = 1


vetores tem a ltima coordenada = 0

Base padro

Recordao de lgebra linear


Os vetores (i,j,k) formam uma base.
A base mais comum (base padro) utiliza vetores
unitrios ortogonais entre si: (1,0,0) (0,1,0) (0,0,1)
chamada de base ortonormal.
A tripla (!,!,!) define a coordenada
cartesiana do vetor v.
Porm, 3 vetores apenas no so suficientes para
determinar a posio de um ponto.
necessrio definirmos uma origem O para o sistema de
coordenada.

Frame de coordenadas
Em um espao afim, precisamos de uma forma de
representar pontos alm de vetores.
Um frame de coordenadas em um espao afim ddimensional ser definido por uma base ortonormal ddimensional e um ponto de origem, de forma que um
ponto P em 3D pode ser representado como:
P = !!i + !!j + !!k + O

Coordenadas Homogneas

Esse tipo de representao denominado


coordenadas homogneas de um ponto ou vetor
relativo a um frame F.

Observaes
Primeiro, um axioma, para facilitar nossa forma
de notao:
0 * P = vetor nulo
1*P=P

Ateno: "vetor" pode ser usado como


vetor livre: entidade geomtrica
vetor de coordenada: forma de representao que
pode ser usada para vetores livres e para pontos.

Propriedades de coord. homogneas


A escolha de 1/0 para ponto/vetor no arbitrria,
ela possui algumas propriedades interessantes
v = P - Q: a ltima coordenada se cancela
seja U e V pontos ou vetores. Aps vrias
operaes da forma U-V, U+V ou U:
se a ltima coord = 0, o resultado um vetor
se a ltima coord = 1, o resultado um ponto
caso contrrio, no uma operao afim vlida.

Isso permite grande flexibilidade, como


combinaes do tipo:
centride = (P+Q+R)/3

Sistemas de coord. alternativos


Existem dois objetivos conflitantes em qualquer
sistema de prog. geomtrica:
pontos e vetores devem ser representados com
respeito a algum sistema universal de coordenadas,
que permita trabalhar com pontos e vetores
simplesmente modificando suas coordenadas;
em geral conveniente representar pontos de
acordo com um sistema de coordenadas local

Conveno:
sistema de coord. universal: frame padro fixo,
ortonormal: e0, e1, e2, O

Exemplo

Mudana de coordenadas: generalizao


Seja F o frame padro
Um frame arbitrrio G pode ento ser descrito com
relao a F como:
Ge0 [F] = (g00, g01, 0)T
Ge1 [F] = (g10, g11, 0)T
GO [F] = (g20, g21, 1)T

dado um ponto P[F] = (!,!,!)T, !=1,


mas manteremos como incgnita para que as
expresses funcionem para vetores livres tambm.
Como determinar P[G] = (0, 1 , 2)T?

Generalizao
w[F] =

M = (G.e0[F] | G.e1[F] | G.O[F] )

P[F] =

P[F] = M P[G]
Portanto: P[G] = M-1 P[F]

w[G] =
P[G] =

Observao importante: o OpenGL armazena matrizes em


ordem de colunas (column-major order), enquanto C e C++
armazenam matrizes em ordem de linhas (row-major order)

Represente w e P nos frames de coordenadas F e G

Exemplo de mudana de coordenadas


Nosso exemplo mostrava que
P[F] = (3,2,1) e w[F]=(2,1,0)
como determinar suas coordenadas no frame G
computacionalmente?

Nosso objetivo encontrar os escalares 0, 1 ,


2 tal que P = 0G.e0 + !G.e1+ 2G.O
Como F um frame, os elementos de G podem ser
descritos em funo de F
G.e0 [F] =(-2,-1,0); G.e1 [F] = (0,1,0), G.O [F] = (5, 1, 1)
sistema linear com 3 equaes e 3 incgnitas
soluo (0, 1 , 2) = (1,2,1)

Transformao Afim
uma classe de transformaes que inclue:
rotao
translao
escala (uniforme e no uniforme)
reflexo
shearing

Propriedades:
todas as transformaes preservam combinaes afins entre
pontos
R = (1 - )P + Q => T(R) = (1-)T(P) + T(Q)

Transformaes
Reflexo
2D: dada uma linha em um plano, a reflexo troca os pontos
de lado simetricamente ao longo dessa linha.
3D: dado um plano em 3D, a reflexo troca os pontos de lado
simetricamente ao longo desse plano.
Pode ser considerado como um caso particular de
escalonamento, em que o fator de escala negativo

Rotao
definida para um ponto ou vetor, fixos no espao.
casos bsicos: rotao na origem, ao redor dos vetores
bases, segundo a regra da mo direita.

Representao matricial
As combinaes afins so preservadas, portanto:

R = !F.e0 + !F.e1 + 2F.O =>


T(R) = !T(F.e0 )+ !T(F.e1 )+ 2T(F.O)
Assim, se R um ponto ou vetor no frame F
e sabemos a transformao dos elementos do frame,
ento sabemos qual a transformao de R, ou
T(R)[F] = (T(F.e0 )[F] | T(F.e1 )[F] | T(F.O)[F])
(!!!!!!
ou seja, aplicar uma transformao afim a um
ponto/vetor equivale a multiplicar suas coordenadas
por uma matriz, formada pela transformao dos
elementos do frame.

Transformaes
Translao
translao por um vetor v mapeia qualquer ponto P para P +
v.
vetores no so afetados por translao

Mudana de escala
Mudana de escala uniforme feita com relao a um ponto.
Consideraremos a origem do frame padro.
dado um escalar , esta transformao mapeia um objeto
(ponto ou vetor) de coordenadas (!,! ,! ,! )T para
(!,! ,! ,! )T
para mudana no uniforme: (!!,!! ,!!
,! )T

Transformaes
Rotao ao redor de z
a origem e o vetor z no so alterados
o vetor unitrio x mapeado para (cos!, sin!, 0,
0)T
o vetor unitrio y mapeado para (-sin!,cos!, 0,
0)T
semelhante para os demais vetores de base

Cizalhamento (Shearing)
pense em shearing como uma transformao que
mapeia um cubo em um paralelogramo (fixe uma
face do cubo, e desloque a face oposta, deformando
as faces laterais).

Transformaes
Shearing
xy-shear: o ponto P = (px, py, pz, 1)T transladado
pelo vetor pz(shx, shy, 0, 0)T, esse vetor ortogonal ao
eixo z e seu comprimento proporcional a
coordenada z do ponto P.
analogamente para xz e yz-shear.

Composio de transformaes
transformaes afins so fechadas sob composio,
ou seja, composies de transformaes afins resulta
em uma transformao afim.
T, S transformaes: (T.S)(P) = (T(S(P))),
ou em notao matricial: MT MS P

Transformaes
Transformaes complexas podem ser resolvidas por:
composies de transformaes simples
determinao da imagem dos elementos da base.
em geral, esse mtodo mais simples
Casos especiais:
Transformaes rgidas ou Euclidianas: so
transformaes que preservam ngulos e
comprimentos. Exemplo: translao, rotao e
reflexo.
Transformaes ortogonais ou homotticas: preservam
ngulos, mas no comprimentos. Exemplo:
escalonamento uniforme.

Outros operadores geomtricos


Vimos at agora as operaes:
mudana de sistemas de coordenadas
transformadas afins

Outros operadores bastante utilizados:


produto vetorial
dado dois vetores, como determinar um terceiro vetor
ortogonal aos dois primeiros?
orientao: dado 2 reais p e q, h 3 possibilidades de
ordenao, (p > q) ou (p < q) ou (p = q), o que permite a
definio de um operador de orientao Or(p,q) que retorna
-1, 0, ou 1 dependendo da ordem de p e q.

Produto Vetorial
O produto vetorial comumente definido no
espao 3D, pois ele se aplica apenas a vetores e
no a pontos.
Dado 2 vetores u, v, o produto vetorial definido
como:
u x v = (uyvz - uzvy, uzvx-uxvz, uxvy-uyvx)T
definio vale para um par de vetores no espao
3D

Determinante: u x v = (e | u | v) T
e : vetores da base

Propriedades do produto vetorial


Simetria reversa: u x v = -( v x u)
u x u = 0

No associativo: ao contrrio de outros produtos


em lgebra, o produto vetorial no associativo:
(u x v) x w != u x (v x w)
Bilinearidade:
u x (v) = (u x v),
u x (v + w) = (u x v) + (u x w)

Outras propriedades do PV
Perpendicularidade: (u x v) perpendicular a u e
a v (u e v linearmente independentes).
ngulo e rea: |u x v| = |u| |v| sin !

ngulo entre u e v: !
em geral o PV no usado para calcular ! pois o
produto escalar mais simples de calcular.
|u x v| igual a rea do paralelograma cujos lados
so dados por u e v.

Orientao
Dados dois nmeros reais p e q, uma funo
possvel de orientao pode ser dado por:
Or(p,q) = sign(q - p)
Como estender esse conceito para dimenses
superiores?
Em um espao d-dimensional, a orientao de
(d+1) pontos pode ser definida pelo sinal do
determinante da matriz composta pelas suas
coordenadas homogneas.

Interpretao
Para um plano, a orientao de 3 pontos (P,Q,R)
+1 se o tringulo PQR orientado no sentido
anti-horrio, -1 se orientado no sentido horrio, e
0 se forem colineares.
Em 3D, uma orientao positiva dos pontos
PQRS significa que eles seguem uma espiral
direita (mo direita), e zero se forem coplanares.
Porque a coordenada homognea primeiro?
caso contrrio o sinal de determinante seria alternado para dimenses
pares e impares

Interseco de linhas
Dado dois segmentos de linha PQ e RS em um plano,
determinar se eles se intersectam.
possveis problemas: linhas paralelas, junes, linhas
colineares, etc.
simplificao: apenas interseces prprias (IP), com um
nico ponto em comum no interior dos segmentos.
se 3 pontos forem colineares, os segs no formam
uma IP.
As linhas se cruzam iff P e Q se encontram em
lados opostos de RS, e R e S se encontram em
lados opostos de PQ
(Or(P,Q,R)*Or(P,Q,S)<0) &&
(Or(R,S,P)*Or(R,S,Q)<0)

O que voc deve saber


Programao geomtrica
independente de coordenadas

Geometrias
Afim
Euclidiana

Frame de Coordenadas
Coordenadas Homogneas
Transformaes: translao, rotao, shear,
escala, reflexo

Você também pode gostar