Geometria Computacional - PUC-Rio
Transcript of Geometria Computacional - PUC-Rio
![Page 1: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/1.jpg)
Geometria Computacional:
Principais Algoritmos Usados
André Maués Brabo Pereira – Depto. de Eng. Civil – UFF
e
Luiz Fernando Martha – Depto. de Eng. Civil – PUC-Rio
Adaptado para a disciplina:
CIV2802 – Sistemas Gráficos para Engenharia
1
![Page 2: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/2.jpg)
Conteúdo• Pick de segmento de reta
• Ponto mais próximo em um segmento de reta
• Tesselagem de polígonos
• Interseção de segmentos de reta
• Verificação de inclusão de ponto em polígono
2
![Page 3: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/3.jpg)
Pick de Segmento de Reta
3
![Page 4: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/4.jpg)
4
Seleção (Pick) de Segmento de Reta(baseada no algoritmo de cerceamento de linhas)
Regiões com o mesmo código e posições triviais(A, B, C, D):
Algoritmo recursivo para recair nos casos triviais:
![Page 5: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/5.jpg)
5
![Page 6: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/6.jpg)
Ponto mais Próximo em um Segmento de Reta
6
![Page 7: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/7.jpg)
C
D’
C’
D
PONTO MAIS PRÓXIMO EM UM SEGMENTO DE RETA UTILIZANDO PRODUTO INTERNO
A B
( )CC A t B A = + −
( )DD A t D C = + −
dC
dD
2C
AB ACt
AB =
Valor paramétrico do ponto C’ no segmento AB:
t
0 1Ct
Projeção do ponto C na reta AB:
Projeção do ponto D na reta AB:
2D
AB ADt
AB =
1Dt
Valor paramétrico do ponto D’ no segmento AB:
(produto interno)
Ponto mais próximo de C no segmento AB:
P C=
Ponto mais próximo de D no segmento AB:
P B=7
![Page 8: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/8.jpg)
Algoritmo paraTesselagem de Polígonos
8
![Page 9: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/9.jpg)
Como tecer uma face não convexa?Solução de SKIENA & REVILLA, 2002, Programming Challenges, p.319
v1v2
v8v3v4
v5 v6
Encontrar ORELHA do polígono até remanescer um único triângulo.POL = 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8Defina duas listas com os vértices anteriores e posteriores:L = 8 / 1 / 2 / 3 / 4 / 5 / 6 / 7R = 2 / 3 / 4 / 5 / 6 / 7 / 8 / 1
![Page 10: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/10.jpg)
Como tecer uma face não convexa?Solução de SKIENA & REVILLA, 2002, Programming Challenges, p.319
v1v2
v8v3v4
v5 v6
v7
Encontrar ORELHA do polígono até remanescer um único triângulo.POL = 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8Defina duas listas com os vértices anteriores e posteriores:L = 8 / 1 / 2 / 3 / 4 / 5 / 6 / 7R = 2 / 3 / 4 / 5 / 6 / 7 / 8 / 1Atualize a lista após o primeiro triângulo encontrado:L = 8 / 1 / 2 / 2 / 4 / 5 / 6 / 7R = 2 / 4 / 4 / 5 / 6 / 7 / 8 / 1
v1v2
v8v3
v5 v6
v7v4
Qualquer polígono com mais de três lados tem pelo menos duas orelhas. Uma ORELHA é definida se o ângulo entre as arestas que emergem do vértice for menor
que 180° e a corda conectando os dois vértices adjacentes não deve intersectar nenhuma outra aresta do polígono (i.e. nenhum outro
vértice deve ficar no triângulo/orelha).
Primeira ORELHA encontrada iniciando por V1 no sentido anti-horário
![Page 11: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/11.jpg)
Como tecer uma face não convexa?Solução de SKIENA & REVILLA, 2002, Programming Challenges, p.319
v1v2
v8v3v4
v5 v6
v7
Encontrar ORELHA do polígono até remanescer um único triângulo.POL = 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8Defina duas listas com os vértices anteriores e posteriores:L = 8 / 1 / 2 / 3 / 4 / 5 / 6 / 7R = 2 / 3 / 4 / 5 / 6 / 7 / 8 / 1Atualize a lista após o primeiro triângulo encontrado:L = 8 / 1 / 2 / 2 / 4 / 5 / 6 / 7R = 2 / 4 / 4 / 5 / 6 / 7 / 8 / 1Atualize a lista após o segundo triângulo encontrado:L = 8 / 1 / 2 / 2 / 2 / 5 / 6 / 7R = 2 / 5 / 4 / 5 / 6 / 7 / 8 / 1
v1v2
v8v3v4
v5 v6
v7
Qualquer polígono com mais de três lados tem pelo menos duas orelhas. Uma ORELHA é definida se o ângulo entre as arestas que emergem do vértice for menor
que 180° e a corda conectando os dois vértices adjacentes não deve intersectar nenhuma outra aresta do polígono (i.e. nenhum outro
vértice deve ficar no triângulo/orelha).
Segunda ORELHA encontrada
11
![Page 12: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/12.jpg)
Como tecer uma face não convexa?Solução de SKIENA & REVILLA, 2002, Programming Challenges, p.319
v1v2
v8v3v4
v5 v6
v7
Encontrar ORELHA do polígono até remanescer um único triângulo.POL = 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8Defina duas listas com os vértices anteriores e posteriores:L = 8 / 1 / 2 / 3 / 4 / 5 / 6 / 7R = 2 / 3 / 4 / 5 / 6 / 7 / 8 / 1Atualize a lista após o primeiro triângulo encontrado:L = 8 / 1 / 2 / 2 / 4 / 5 / 6 / 7R = 2 / 4 / 4 / 5 / 6 / 7 / 8 / 1Atualize a lista após o segundo triângulo encontrado:L = 8 / 1 / 2 / 2 / 2 / 5 / 6 / 7R = 2 / 5 / 4 / 5 / 6 / 7 / 8 / 1
v1v2
v8v3v4
v5 v6
v7
Qualquer polígono com mais de três lados tem pelo menos duas orelhas. Uma ORELHA é definida se o ângulo entre as arestas que emergem do vértice for menor
que 180° e a corda conectando os dois vértices adjacentes não deve intersectar nenhuma outra aresta do polígono (i.e. nenhum outro
vértice deve ficar no triângulo/orelha).
Terceira ORELHA encontrada
12
Atualize a lista após o terceiro triângulo encontrado:L = 8 / 1 / 2 / 2 / 2 / 2 / 6 / 7R = 2 / 6 / 4 / 5 / 6 / 7 / 8 / 1
![Page 13: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/13.jpg)
Como tecer uma face não convexa?Solução de SKIENA & REVILLA, 2002, Programming Challenges, p.319
v1v2
v8v3v4
v5 v6
v7
Encontrar ORELHA do polígono até remanescer um único triângulo.POL = 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8Defina duas listas com os vértices anteriores e posteriores:L = 8 / 1 / 2 / 3 / 4 / 5 / 6 / 7R = 2 / 3 / 4 / 5 / 6 / 7 / 8 / 1Atualize a lista após o primeiro triângulo encontrado:L = 8 / 1 / 2 / 2 / 4 / 5 / 6 / 7R = 2 / 4 / 4 / 5 / 6 / 7 / 8 / 1Atualize a lista após o segundo triângulo encontrado:L = 8 / 1 / 2 / 2 / 2 / 5 / 6 / 7R = 2 / 5 / 4 / 5 / 6 / 7 / 8 / 1
v1v2
v8v3v4
v5 v6
v7
Qualquer polígono com mais de três lados tem pelo menos duas orelhas. Uma ORELHA é definida se o ângulo entre as arestas que emergem do vértice for menor
que 180° e a corda conectando os dois vértices adjacentes não deve intersectar nenhuma outra aresta do polígono (i.e. nenhum outro
vértice deve ficar no triângulo/orelha).
Quarta ORELHA encontrada
13
Atualize a lista após o terceiro triângulo encontrado:L = 8 / 1 / 2 / 2 / 2 / 2 / 6 / 7R = 2 / 6 / 4 / 5 / 6 / 7 / 8 / 1Atualize a lista após o quarto triângulo encontrado:L = 8 / 1 / 2 / 2 / 2 / 1 / 6 / 7R = 6 / 6 / 4 / 5 / 6 / 7 / 8 / 1
![Page 14: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/14.jpg)
Algoritmo para Interseção de Segmentos de Reta
14
![Page 15: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/15.jpg)
B
A D
C
Fonte: Ricardo Marques
COMO TRATAR A INTERSEÇÃO DE SEGMENTOS DE RETA DE FORMA ROBUSTA E EFICIENTE?
15
![Page 16: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/16.jpg)
P
C
D’
C’
D
INTERSEÇÃO BASEADA NA REPRESENTAÇÃO PARAMÉTRICA DOS SEGMENTOS
A B
( )ABP A t B A= + −
( )CDP C t D C= + −
dC
dD
dC
dC
0Cd 0Dd
Considere que as distâncias dos pontos C e D para a reta AB têm sinal:
CCD
C D
dt
d d=
+
Valor paramétrico do ponto P na reta CD:
CCD
C D
dt
d d=
−
CDt
0 1CDt
16
M. Gavrilova and J. G. Rokne. (2000) “Reliable line segment intersection testing”, CAD 32, 737–746
![Page 17: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/17.jpg)
Distância com sinal pode ser substituída por produto vetorial
C
A
B
dC
INTERSEÇÃO BASEADA NA REPRESENTAÇÃO PARAMÉTRICA DOS SEGMENTOS
C
A
B
Area
2
CAB dArea
=
C’
2
AB ACArea
=
( ) ( )
2
B A C AArea
− −=
2 ( , , )C
orient d A B Cd
AB=
2 ( , , ) ( ) ( )orient d A B C B A C A= − −
Definição: (dobro da) área orientada do triângulo
Analogamente: 2 ( , , )
D
orient d A B Dd
AB= Observe que os sinais das distâncias
são resolvidos naturalmente.
Portanto:
17
![Page 18: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/18.jpg)
C
A
B
INTERSEÇÃO BASEADA NA REPRESENTAÇÃO PARAMÉTRICA DOS SEGMENTOS
D2 ( , , )
C
orient d A B Cd
AB=
Valor paramétrico do ponto P na reta CD:
CCD
C D
dt
d d=
−
( )CDP C t D C= + −
P
2 ( , , )D
orient d A B Dd
AB=
2 ( , , )
2 ( , , ) 2 ( , , )CD
orient d A B Ct
orient d A B C orient d A B D=
−
Analogamente:
Portanto:
2 ( , , )
2 ( , , ) 2 ( , , )AB
orient d C D At
orient d C D A orient d C D B=
−( )ABP A t B A= + −
18
![Page 19: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/19.jpg)
Segment_Segment_Intersection(u, v):if both endpoints of u are over v then
return falseend ifif both endpoints of u are under v then
return falseend ifif both endpoints of v are over u then
return falseend ifif both endpoints of v are under u then
return falseend ifif u and v are collinear then
return falseend if
if u and v are parallel thenreturn false
end if
if u touches v then (there are many cases)return true
end if
// When get to this point, there is an intersection point
return true
B
A
D
C
B
A D
CB
A
D
C
B
A
D
C
2 ( , , ) 0orient d C D A 2 ( , , ) 0orient d C D B
2 ( , , ) 0orient d C D A 2 ( , , ) 0orient d C D B
2 ( , , ) 0orient d A B C 2 ( , , ) 0orient d A B D
2 ( , , ) 0orient d A B C 2 ( , , ) 0orient d A B D
2 ( , , ) 0orient d C D A = 2 ( , , ) 0orient d C D B =
2 ( , , ) 2 ( , , )orient d C D A orient d C D B=
2 ( , , ) 0orient d A B C = 2 ( , , ) 0orient d A B D =ou
2 ( , , ) 2 ( , , )orient d A B C orient d A B D=ou
B
AD
C
2 ( , , ) 0orient d C D A 2 ( , , ) 0orient d C D B =
B
AD
C
P2 ( , , )
2 ( , , ) 2 ( , , )CD
orient d A B Ct
orient d A B C orient d A B D=
−
( )CDP C t D C= + −
P B=
19
![Page 20: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/20.jpg)
Algoritmo para verificação de
ponto dentro de polígono
20
![Page 21: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/21.jpg)
Algoritmo do raio (ou tiro)Philip Schneider and David Eberly Geometric Tools for Computer Graphics, 2003, p.70
Uma semirreta (raio) que parte de qualquer ponto dentro de polígono em uma direção qualquer cortará as curvas no bordo do polígono um número impar de vezes. Se a semirreta cortar a fronteira do polígono um número par de vezes, o ponto está fora do polígono.
21
![Page 22: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/22.jpg)
Critérios para contar interseções do raio com um segmento de bordo
Interseção no interior do segmento: conta 1 vez
Interseção no ponto inferior dosegmento: conta 1 vez
Segmento de bordo horizontal: não conta
Interseção no ponto superior do segmento: não conta
22
![Page 23: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/23.jpg)
23
Tratamento dos casos não triviais:
![Page 24: Geometria Computacional - PUC-Rio](https://reader035.fdocumentos.com/reader035/viewer/2022071315/62cd8d43c2f670788c397a6d/html5/thumbnails/24.jpg)
24