Geometria e Programação Geométrica
Capítulo 5 (Foley & van Dam)
Programação geométrica
Existem muitas áreas da Ciência da Computação que exigem o uso de entidades geométricas
Computação gráfica
CAD - computer aided design
Robótica
Visão computacional
GIS - geografic information systems
Geometria e Computação Gráfica
CG trabalha basicamente com a geometria de linhas e objetos lineares no espaço 3D.
Exemplos:
intersecções geométricas
orientação
transformação
mudança de coordenadas
Programação independente de coordenadas
Tradicionalmente um livro de CG introduz um sistema de coords, vetores, matrizes, seguido por fórmulas que envolvem diversas matrizes 4x4.
Embora conveniente, se torna difícil ao programador "ver" o que ele está programando.
Tony DeRose: desenvolveu um método de programação geométrica independente de coordenadas, o que simplifica o raciocínio geométrico, ou seja, ao invés de matrizes, utilizaremos operadores geométricos de alto nível (esse sim, são implementados com matrizes).
Geometrias
geo = terra, metria = medida
Agricultura, pirâmides, etc...
Euclides: [sec 3 AC] formalizou a geometria a partir de alguns axiomas (sem sistema de coords).
Descartes: [sec 17] introduz um sistema de coords, permitindo que conceitos geométricos fossem expressos matematicamente.
Sec 19: geometrias não Euclidianas [Lobachevski e Gauss], sugerem outros sistemas onde se aplicam outros axiomas.
Afim, euclidiana, e projetiva.
Geometria Afim
Elementos básicos
escalares (números)
pontos: usados para indicar uma posição
vetores livres (ou simplesmente vetores): possuem direção e magnitude, mas nenhuma posição
vetor nulo ou zero
Por que distinguir pontos de vetores?
para tornar clara a intenção do programador
exemplo
escalar * vetor (ok) escalar * ponto (?)
Convenções
pontos: letras romanas maiúsculas vetores: letras romanas minúsculas
em geral, sobrepostos com uma flecha
escalares: letra grega
Combinações:
v = e . v , ou v = v / e (multiplicação por escalar)
v = v + v ou v = v - v (adição de vetores)
v = p - p (diferença entre pontos)
p = p + v ou p = p - v (adição entre p e v)
Combinações Afins
Existe uma combinação particular entre pontos que consideraremos válida, denominada combinação afim.
Dado dois pontos Q e P, qual é o seu ponto médio R?
Mais genérico: qual o ponto R que divide PQ nas proporções αe 1-α? { α entre [0,1]}
Soluções
R = P + α(Q - P) (escala de Q-P)
R = (1 -α)P +αQ (média ponderada)
Combinação convexa
definida para α no intervalo [0,1]
Definições
Combinação afim: dada uma seqüência de pontos P1 a Pn, uma combinação afim é uma somatória da forma:
α1.P1 + α2.P2 + .. +αn.Pn
onde a somatória de αi deve ser 1.
Combinação convexa: é uma combinação afim, onde αi são todos não negativos.
informalmente, tomaremos a liberdade de escrever expressões do tipo: R = (P + Q) / 2
Exercícios:
Dados 3 pontos tridimensionais não colineares, qual é a união de todas as suas combinações afins?
Resposta: todo o plano contendo os 3 pontos
Qual a união de todas as suas combinações convexas?
Resposta: o triângulo (incluindo o seu interior) formado pelos 3 pontos.
Geometria Euclidiana
A geometria afim não possui um mecanismo para tratar ângulos e distâncias.
A geometria euclidiana é uma extensão 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:
Positividade: <u.u> >= 0 e <u.u> = 0 iff u = 0;
Simetria: <u.v> = <v.u>
Bilinearidade: <u. v+w> = <u.v. + <u.w> e <u. αv> = α<u.v>
Produto escalar de 2 vetores
O produto escalar <u.v> = Σui.vi
Comprimento de um vetor: |v| = sqrt[ <v.v> ]
Normalização: dado um vetor não nulo v, a normalização de v resulta em um vetor de comprimento unitário, de mesma direção
v' = v / |v|
Distância entre pontos: dist(P, Q) = |P - Q|
Ângulo entre 2 vetores não nulos:
θ = ang(u,v) = cos-1(<u.v> / |u|.|v|) = cos-1(<u' . v'>)
cosθ= <u'.v'>
Outras propriedades
Ortogonalidade
u e v são ortogonais (ou perpendiculares) se <u.v> = 0 Projeção ortogonal: dados um vetor u e um vetor não nulo v, é em geral conveniente decompor u como a soma de dois vetores u = u1 + u2, onde u1 é paralelo a v e u2 é ortogonal a v
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 projeção ortogonal de u sobre v.
Sistema de coordenadas
Sistema de coordenadas é o mecanismo utilizado para a definição dos objetos primitivos da geometria euclidiana (ponto, vetor, etc).
Como representar pontos e vetores no espaço afim?
Álgebra linear: uso de 3 vetores linearmente independentes (i, j, k):
v = α0 i + α1 j + α2 k
Recordação de álgebra linear
Os vetores (i,j,k) formam uma base.
A base mais comum utiliza vetores unitários ortogonais entre si: (1,0,0) (0,1,0) (0,0,1) chamada de base ortonormal.
A tripla (α0,α1,α2) define a coordenada cartesiana do vetor v.
Porém, 3 vetores apenas não são suficientes para determinar a posição de um ponto.
É necessário definirmos uma origem O para o sistema de coordenada.
Frame de coordenadas
Um frame de coordenadas em espaços afins será definido por uma base ortonormal e um ponto chamado de origem, de forma que um ponto P em 3D pode ser representado como:
P = α0 i + α1 j + α2 k + O Exemplos
Coordenadas Homogêneas
Para representar pontos e vetores em um espaço d-dimensional, utilizaremos vetores de
comprimento d+1.
pontos tem a última coordenada = 1
vetores tem a última coordenada = 0
Esse tipo de representação é denominado coordenadas homogêneas de um ponto ou vetor relativo a um frame F.
Observações
Primeiro, um axioma, para facilitar nossa forma de notação:
0 . P = vetor nulo
1 . P = P
Atenção: "vetor" pode ser usado como
vetor livre: entidade geométrica
vetor de coordenada: forma de representação que pode ser usada para vetores livres e para pontos.
Propriedades de coord. homogêneas
A escolha de 1/0 para ponto/vetor não é arbitrária, ela possui algumas propriedades interessantes
v = P - Q: a última coordenada se cancela
seja U e V pontos ou vetores. Após várias operações 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 contrário, não é uma operação afim válida.
Isso permite grande flexibilidade, como combinações do tipo:
centróide = (P+Q+R)/3
Sistemas de coord. alternativos
Existem dois objetivos conflitantes em qualquer sistema de prog. geométrica:
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
Convenção:
sistema de coord. universal: frame padrão fixo, ortonormal: e0, e1, e2, O
Exemplo de mudança 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 + β1G.e1+ β2G.O
Como F é um frame, os elementos de G podem ser descritos em função de F
G.e0 [F] =(-2,-1,0); G.e1 [F] = (0,1,0), G.O [F] = (5, 1, 1)
sistema linear com 3 equações e 3 incógnitas
solução (β0, β1 , β2) = (1,2,1)
Mudança de coordenadas: generalização Seja F o frame padrão
Um frame arbitrário G pode então ser descrito com relação 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] = (α0,α1,α2)T, α2=1, mas manteremos como incógnita para que as
expressões funcionem para vetores livres também.
Como determinar P[G] = (β0, β1 , β2)T?
Transformação Afim
É uma classe de transformações que inclue:
rotação
translação
escala (uniforme e não uniforme)
reflexão
shearing
Propriedades:
todas as transformações preservam combinações afins entre pontos
R = (1 -α)P +αQ => T(R) = (1-α)T(P) + αT(Q)
Exemplos
Rotação Translação Escala Uniforme
Escala não Uniforme
Reflexão Cisalhamento
Representação matricial
As combinações afins são preservadas, portanto:
R = α0F.e0 + α1F.e1 + α2F.O =>
T(R) = α0T(F.e0 )+ α1T(F.e1 )+ α2T(F.O)
Assim, se R é um ponto ou vetor no frame F
e sabemos a transformação dos elementos do frame, então sabemos qual a transformação de R, ou
T(R)[F] = (T(F.e0 )[F] | T(F.e1 )[F] | T(F.O)[F]) (α0 α1 α2)Τ
ou seja, aplicar uma transformação afim a um ponto/vetor equivale a multiplicar suas coordenadas por uma matriz, formada pela transformação dos elementos do frame.
Transformações
Translação
translação por um vetor v mapeia qualquer ponto P para P + v.
vetores não são afetados por translação
Mudança de escala
Mudança de escala uniforme é feita com relação a um ponto.
Consideraremos a origem do frame padrão.
dado um escalar β, esta transformação mapeia um objeto (ponto ou vetor) de coordenadas (α0,α1,α2,α3)T para (βα0,βα1,βα2,α3)T
para mudança não uniforme: (β0α0,β1α1,β2α2,α3)T
Transformações
Reflexão
2D: dada uma linha em um plano, a reflexão troca os pontos de lado simetricamente ao longo dessa linha.
3D: dado um plano em 3D, a reflexão 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
Rotação
é definida para um ponto ou vetor, fixos no espaço.
casos básicos: rotação na origem, ao redor dos vetores bases, segundo a regra da mão direita.
Transformações
Rotação ao redor de z
a origem e o vetor z não são alterados
o vetor unitário x é mapeado para (cosθ, sinθ, 0, 0)T
o vetor unitário y é mapeado para (-sinθ,cosθ, 0, 0)T
semelhante para os demais vetores de base
Shearing
pense em shearing como uma transformação que mapeia um cubo em um paralelogramo (fixe uma face do cubo, e desloque a face oposta, deformando as faces laterais).
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.
Composição de transformações
transformações afins são fechadas sob composição, ou seja, composições de transformações afins resulta em uma transformação afim.
T, S transformações: (T.S)(P) = (T(S(P))), ou em notação matricial: MTMSP
Transformações Transformações
Transformações complexas podem ser resolvidas por:
composições de transformações simples
determinação da imagem dos elementos da base.
em geral, esse método é mais simples
Casos especiais:
Transformações rígidas ou Euclidianas: são transformações que preservam ângulos e comprimentos. Exemplo: translação, rotação e reflexão.
Transformações ortogonais ou homotéticas: preservam ângulos, mas não comprimentos. Exemplo:
Outros operadores geométricos
Vimos até agora as operações:
mudança de sistemas de coordenadas
transformadas afins
Outros operadores bastante utilizados:
produto vetorial cruzado
dado dois vetores, como determinar um terceiro vetor ortogonal aos dois primeiros?
orientação: dado 2 reais p e q, há 3 possibilidades de ordenação, (p > q) ou (p < q) ou (p = q), o que permite a definição de um operador de orientação Or(p,q) que retorna - 1, 0, ou 1 dependendo da ordem de p e q.
Produto Vetorial
O produto vetorial é comumente definido no espaço 3D, pois ele se aplica apenas a vetores e não a pontos.
Dado 2 vetores u, v, o produto vetorial é definido como:
u xv = (uyvz - uzvy, uzvx-uxvz, uxvy-uyvx)T
definição vale para um par de vetores no espaço 3D
Determinante: u xv = (e | u | v) T
e : vetores da base
Propriedades do produto vetorial
Simetria reversa: u xv = -( v xu)
u xu = 0
Não associativo: ao contrário de outros produtos em álgebra, o produto vetorial não é associativo:
(u xv) xw != u x(v xw)
Bilinearidade:
u x(αv) = α(u xv),
u x(v + w) = (u xv) + (u xw)
Outras propriedades do PV
Perpendicularidade: (u xv) é perpendicular a u e a v (u e v linearmente independentes).
Ângulo e área: |u xv| = |u| |v| sinθ
ângulo entre u e v: θ
em geral o PV não é usado para calcular θpois o produto escalar é mais simples de calcular.
|u xv| é igual a área do paralelograma cujos lados são dados por u e v.
Orientação
Dados dois números reais p e q, uma função possível de orientação pode ser dado por:
Or(p,q) = sign(q - p)
Como estender esse conceito para dimensões superiores?
Em um espaço d-dimensional, a orientação de (d+1) pontos pode ser definida pelo sinal do determinante da matriz composta pelas suas coordenadas homogêneas.
Interpretação
Para um plano, a orientação de 3 pontos (P,Q,R) é +1 se o triângulo PQR é orientado no sentido anti-horário, -1 se orientado no sentido horário, e 0 se forem colineares.
Em 3D, uma orientação positiva dos pontos PQRS significa que eles seguem uma espiral direita (mão direita), e zero se forem coplanares.
Porque a coordenada homogênea primeiro?
caso contrário o sinal de determinante seria alternado para dimensões pares e impares
Intersecção de linhas
Dado dois segmentos de linha PQ e RS em um plano, determinar se eles se intersectam.
possíveis problemas: linhas paralelas, junções, linhas colineares, etc.
simplificação: apenas intersecções próprias (IP), com um único ponto em comum no interior dos segmentos.
se 3 pontos forem colineares, os segs não 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
Programação geométrica
independente de coordenadas
Geometrias
Afim
Euclidiana
Frame de Coordenadas
Coordenadas Homogêneas
Transformações: translação, rotação, shear, escala, reflexão