geometria computacional

42
Geometria Computacional Prof. Walter Mascarenhas Segundo semestre de 2004 Aula 6

Upload: myrrh

Post on 15-Jan-2016

37 views

Category:

Documents


0 download

DESCRIPTION

Geometria Computacional. Prof. Walter Mascarenhas Segundo semestre de 2004 Aula 6. Triangulação em O(n logn). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Geometria Computacional

Geometria Computacional

Prof. Walter Mascarenhas

Segundo semestre de 2004

Aula 6

Page 2: Geometria Computacional

Triangulação em O(n logn)

1- Ordene os pontos pela coordenada y O(n logn)

2- Decomponha o polígono em trapézios usando uma scanline O(n logn)

3- Usando os trapézios, quebre o polígono em partes monótonas através da eliminação das cúspides internas O(n)

4- Triangule as partes monótonas O(n)

Page 3: Geometria Computacional

Vértices reflexos e cúspides internasUm vértice v de um polígono P é reflexo se o seu ângulo interno é estritamente maior que pi. Um vértice reflexo r é uma cúspide interna de P com relação à reta r se seus dois vizinhos estão contidos no mesmo semi-plano fechado definido pela paralela a r que passa por v.

Page 4: Geometria Computacional

Partição em trapéziosUm polígono particionado em trapézios (triângulos são trapézios degenerados.) Note que o lado inferior de cada trapézio contém exatamente um vértice e o superior também

Page 5: Geometria Computacional

Método da scanline

Page 6: Geometria Computacional

Poligonais estritamente monótonasUma poligonal P é estritamente monótona com respeito à uma reta r se toda perpendicular à r corta P em no máximo um ponto

Page 7: Geometria Computacional

Poligonais monótonas

Uma poligonal P é monótona com respeito à uma reta r se toda perpendicular à r corta P em no máximo uma componente conexa

Page 8: Geometria Computacional

Observação

Page 9: Geometria Computacional

Polígonos monótonosUma polígono é (estritamente) monótono com respeito à uma reta r se puder ser particionado em duas poligonais que são (estritamente) monótonas com respeito a r

Page 10: Geometria Computacional

Conseqüência da observação passada

Page 11: Geometria Computacional

Critério de não monotonicidade

Lema: Um polígono P não monótono com relação a uma reta r contém pelo menos uma cúspide interna com relação a r..

A recíproca deste lema e versões mais fortes são falsas:

Page 12: Geometria Computacional

Porque o lema é correto

Page 13: Geometria Computacional

Porque é chato provar o lema

Page 14: Geometria Computacional

Prova: simplifique o polígono

1- Polígonos com menos vértices são mais simples

2- Polígonos com “máximos locais” mais para baixo são mais simples

3- Polígonos com “mínimos locais” mais para cima são mais simples

Page 15: Geometria Computacional

Se não der para simplificar então há cúspides

Page 16: Geometria Computacional

Prova

1- Remova todos os máximos locais com pelo menos um vizinho acima da reta “crítica”

2- Remova todos os mínimos locais com pelo menos um vizinho abaixo da reta crítica..

3- Os vértices do polígono resultante não podem ter os dois vizinhos em lados opostos da reta crítica!

4- O polígono resultante é um ``zig zag’’

5- Dentre três vértices consecutivos em um zig-zag há uma cúspide

Page 17: Geometria Computacional

Prova

Page 18: Geometria Computacional

Prova

Page 19: Geometria Computacional

De trapézios para partes monótonas:

Basta remover as cúspides internas conectando-as da seguinte maneira:

1- Uma cúspide interna que está no lado inferior de um trapézio é ligada ao vértice do polígono que está no lado superior do mesmo trapézio por uma diagonal

2- Uma cúspide interna que está no lado superior de um trapézio é ligada ao vértice do polígono que está no lado inferior do mesmo trapézio por uma diagonal

Page 20: Geometria Computacional

De trapezóides para partes monótonas:

Page 21: Geometria Computacional

Triangulando polígonos monótonos em O(n)

Page 22: Geometria Computacional

Triangulando polígonos monótonos em O(n)

A partir do topo, escolha o lado no qual o segundo vértice (v) está mais baixo (esquerda neste caso). Percorra os vértices no lado oposto a v, removendo os vértices convexos, como indicado na figura

Page 23: Geometria Computacional

Triangulando polígonos monótonos em O(n)

A remoção de vértices convexos é recursiva, até que restem apenas vértices reversos.

Page 24: Geometria Computacional

Triangulando polígonos monótonos em O(n)

Após a remoção dos vértices convexos, os vértices restantes podem ser ligados a v, definindo triângulos. Após a remoção destes triângulos, o vértice do topo é atualizado.

Page 25: Geometria Computacional

Triangulando polígonos monótonos em O(n)

O processo requer O(n) operações pois cada triângulo é determinado em O(1) operações e, como já vimos, toda triangulação tem n - 2 triângulos.

Page 26: Geometria Computacional

Contando o número de operações

Para contar as operações montaremos uma planilha com duas colunas: uma listará os vértices pendentes e a outra conterá os vértices “externos” em triângulos removidos. A cada passo atualizaremos o “cursor” (em vermelho).

Page 27: Geometria Computacional

Contando o número de operações

No primeiro passo verificamos qual dos vizinhos do vértice 1 está mais abaixo, inserimos o vértice 1 na lista de pendências e movemos o cursor para o vizinho mais baixo.

Page 28: Geometria Computacional

Como o vértice anterior ao 2 é o 1 e o vértice 3 está acima do 11, coloco o 2 na coluna de pendências e movo o cursor para o 3.

Page 29: Geometria Computacional

O vértice anterior ao 3, o 2, é reverso: coloco o 3 na coluna de pendências e movo o cursor para o 4.

Page 30: Geometria Computacional

O vértice 3 é convexo: formo o triângulo 2-3-4, coloco 3 na coluna “Triang” e mantenho o cursor em 4.

Page 31: Geometria Computacional

O vértice anterior ao 4, o 2, é reverso: coloco o 4 na coluna de pendências e movo o cursor para 5.

Page 32: Geometria Computacional

O vértice anterior ao 5, o 4, é reverso: coloco o 5 na coluna de pendências e movo o cursor para 6.

Page 33: Geometria Computacional

O vértice anterior ao 6, o 4, é reverso: insiro o 6 na coluna de pendências e movo o cursor para o 7.

Page 34: Geometria Computacional

O vértice anterior ao 7, o 6, é reverso: insiro o 7 na coluna de pendências e movo o cursor para o 8.

Page 35: Geometria Computacional

O vértice anterior ao 8, o 7, é reverso: insiro o 8 na coluna de pendências e movo o cursor para o 9.

Page 36: Geometria Computacional

O vértice anterior ao 9, o 8, é convexo: monto o triângulo 7-8-9, insiro o 8 na coluna “Triang” e mantenho o cursor no 9.

Page 37: Geometria Computacional

O vértice anterior ao 9, o 7, é convexo: monto o triângulo 6-7-9, insiro o 7 na coluna “Triang” e mantenho o cursor no 9.

Page 38: Geometria Computacional

O vértice anterior ao 9, o 6, é convexo: monto o triângulo 4-6-9, insiro o 6 na coluna “Triang” e mantenho o cursor no 9.

Page 39: Geometria Computacional

O vértice anterior ao 9, o 4, é convexo: monto o triângulo 2-4-9, insiro o 4 na coluna “Triang” e mantenho o cursor no 9.

Page 40: Geometria Computacional

O vértice anterior ao 9, o 2, é convexo: monto o triângulo 1-2-9, insiro o 2 na coluna “Triang” e mantenho o cursor no 9.

Page 41: Geometria Computacional

O vértice anterior ao 9 é o 1 e o vértice 10 está abaixo do 11: monto o triângulo 9-1-11, insiro o 1 na coluna “Triang” e repito o processo para os vértices abaixo do 9 (note que estamos numa situação similar à que

estávamos ao analisar o vértice 1).

Page 42: Geometria Computacional

Estimativa final do número de operações

1- A cada passo inserimos alguém ou na coluna de pendências ou na de triângulos. Cada passo requer O(1) operações. Logo o número de operações é da ordem do número de elementos na duas colunas.

2- Cada vértice só é inserido uma vez na coluna de triângulos, pois no momento da inserção ele é removido do polígono

3- Cada vértice só é inserido uma vez na coluna de pendências, no momento em que o cursor se move dele para um vértice inferior.

Conclusão: o número de operações é da ordem é O(2n) = O(n).