ponto está no polígono? - ime-uspcris/aulas/07_2_331/notas-de-aula/... · p convexo algoritmo...

37
Ponto q está no polígono? P convexo Geometria Computacional – p.1/12

Upload: lenguyet

Post on 27-Nov-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ponto q está no polígono?

P convexo

Geometria Computacional – p.1/12

Page 2: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ponto q está no polígono?

P convexo

Algoritmo trivial:verifique se q está à esquerda de todas as arestas de P

Geometria Computacional – p.1/12

Page 3: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ponto q está no polígono?

P convexo

Algoritmo trivial:verifique se q está à esquerda de todas as arestas de P

Complexidade: linear

Geometria Computacional – p.1/12

Page 4: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ponto q está no polígono?

P convexo

Algoritmo trivial:verifique se q está à esquerda de todas as arestas de P

Complexidade: linear

Algo mais rápido?

Geometria Computacional – p.1/12

Page 5: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ponto q está no polígono?

P convexo

Algoritmo trivial:verifique se q está à esquerda de todas as arestas de P

Complexidade: linear

Algo mais rápido?

Busca binária!

Procure a fatia onde q está.

q está à esquerda ou à direitada aresta na fatia?

v0

q

Geometria Computacional – p.1/12

Page 6: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ponto q está no polígono?

E se P não for convexo?

Geometria Computacional – p.2/12

Page 7: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ponto q está no polígono?

E se P não for convexo?

Os dois algoritmos anteriores funcionam para algunspolígonos não convexos.

Quais?

Geometria Computacional – p.2/12

Page 8: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ponto q está no polígono?

E se P não for convexo?

Os dois algoritmos anteriores funcionam para algunspolígonos não convexos.

Quais?

Polígonos estrela(star polygon)

P tem um ponto p que enxergatodos os outros pontos de P .

p

q

Geometria Computacional – p.2/12

Page 9: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Polígonos arbitrários

Problema: Dados P e q, decidir se q está ou não em P .

Geometria Computacional – p.3/12

Page 10: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Polígonos arbitrários

Problema: Dados P e q, decidir se q está ou não em P .

Dois algoritmos lineares:

número de voltas (winding number)

cruzamentos de um raio (ray crossings)

Geometria Computacional – p.3/12

Page 11: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Polígonos arbitrários

Problema: Dados P e q, decidir se q está ou não em P .

Dois algoritmos lineares:

número de voltas (winding number)

cruzamentos de um raio (ray crossings)

Ângulo com sinal de ~ab em relação a q:

a

ab

bθ > 0 θ < 0

q q

Geometria Computacional – p.3/12

Page 12: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Winding number

Problema: Dados P e q, decidir se q está ou não em P .

Geometria Computacional – p.4/12

Page 13: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Winding number

Problema: Dados P e q, decidir se q está ou não em P .

Calcule a soma dos ângulos com sinalde cada aresta de δP em relação a q.

Geometria Computacional – p.4/12

Page 14: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Winding number

Problema: Dados P e q, decidir se q está ou não em P .

Calcule a soma dos ângulos com sinalde cada aresta de δP em relação a q.

Esse número é ou zero ou 2π.

Geometria Computacional – p.4/12

Page 15: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Winding number

Problema: Dados P e q, decidir se q está ou não em P .

Calcule a soma dos ângulos com sinalde cada aresta de δP em relação a q.

Esse número é ou zero ou 2π.

Winding number: essa soma dividida por 2π

Geometria Computacional – p.4/12

Page 16: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Winding number

Problema: Dados P e q, decidir se q está ou não em P .

Calcule a soma dos ângulos com sinalde cada aresta de δP em relação a q.

Esse número é ou zero ou 2π.

Winding number: essa soma dividida por 2π

Se o winding number é zero, q não está em P .Senão q está em P .

Geometria Computacional – p.4/12

Page 17: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ray crossingsProblema: Dados P e q, decidir se q está ou não em P .

Geometria Computacional – p.5/12

Page 18: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ray crossingsProblema: Dados P e q, decidir se q está ou não em P .

R: raio horizontal saindo de q para x = +∞

Quantas vezes que R cruza δP?

Geometria Computacional – p.5/12

Page 19: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ray crossingsProblema: Dados P e q, decidir se q está ou não em P .

R: raio horizontal saindo de q para x = +∞

Quantas vezes que R cruza δP?Quantas arestas de δP o raio R cruza?

Geometria Computacional – p.5/12

Page 20: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ray crossingsProblema: Dados P e q, decidir se q está ou não em P .

R: raio horizontal saindo de q para x = +∞

Quantas vezes que R cruza δP?Quantas arestas de δP o raio R cruza?

cruza 2 arestas

cruza 3

cruza 3

cruza 4

cruza 6

q1

q2

q3

q4

q5

Geometria Computacional – p.5/12

Page 21: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Ray crossingsProblema: Dados P e q, decidir se q está ou não em P .

R: raio horizontal saindo de q para x = +∞

Quantas vezes que R cruza δP?Quantas arestas de δP o raio R cruza?

cruza 2 arestas

cruza 3

cruza 3

cruza 4

cruza 6

q1

q2

q3

q4

q5

Se cruza um número par de arestas, q não está em P .Senão q está em P .

Geometria Computacional – p.5/12

Page 22: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Casos especiais

R: raio horizontal saindo de q para x = +∞

Quantas arestas de δP o raio R cruza?

Geometria Computacional – p.6/12

Page 23: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Casos especiais

R: raio horizontal saindo de q para x = +∞

Quantas arestas de δP o raio R cruza?

cruza 4 arestas...

cruza 5 arestas...cruza 6 arestas...

cruza quantas??

q1

q2

q3

q4

Como tratar destes casos?

Geometria Computacional – p.6/12

Page 24: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Casos especiais

R: raio horizontal saindo de q para x = +∞

Quantas arestas de δP o raio R cruza?

cruza 3!

cruza 4!cruza 5!

cruza 3!

q1

q2

q3

q4

Como tratar destes casos?

Considere cada arestafechada no extremo superior e aberta no inferior!

Geometria Computacional – p.6/12

Page 25: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Primeira versão do algoritmoSuponha que q é a origem.

Em-Polígono-v0(P, n)

1 c← 0

2 para i← 0 até n− 1 faça3 j ← (i + n− 1) mod n � vértice i− 1

4 se (P [i][Y ] > 0 e P [j][Y ] ≤ 0)4 se ou (P [j][Y ] > 0 e P [i][Y ] ≤ 0)5 então x← (P [i][X ] ∗ P [j][Y ]− P [j][X ] ∗ P [i][Y ])

5 então x← /(P [j][Y ]− P [i][Y ]) � intersecção c/ eixo x

6 se x > 0

7 então c← c + 1

8 se c é ímpar9 então devolva DENTRO

10 senão devolva FORA

Geometria Computacional – p.7/12

Page 26: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Primeira versão do algoritmoSuponha que q é a origem.

Em-Polígono-v0(P, n)

1 c← 0

2 para i← 0 até n− 1 faça3 j ← (i + n− 1) mod n � vértice i− 1

4 se (P [i][Y ] > 0 e P [j][Y ] ≤ 0)4 se ou (P [j][Y ] > 0 e P [i][Y ] ≤ 0)5 então x← (P [i][X ] ∗ P [j][Y ]− P [j][X ] ∗ P [i][Y ])

5 então x← /(P [j][Y ]− P [i][Y ]) � intersecção c/ eixo x

6 se x > 0

7 então c← c + 1

8 se c é ímpar9 então devolva DENTRO

10 senão devolva FORA

Nem sempre funciona quando q está na fronteira de P ...Geometria Computacional – p.7/12

Page 27: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Pontos na fronteira

R: raio horizontal saindo de q para x = +∞

Quantas arestas de δP o raio R cruza?

Geometria Computacional – p.8/12

Page 28: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Pontos na fronteira

R: raio horizontal saindo de q para x = +∞

Quantas arestas de δP o raio R cruza?

cruza 2 arestas...

cruza 2 arestas...cruza 2 arestas...

cruza 4 arestas...

cruza 4 arestas...

q1

q2

q3

q4

q5

Geometria Computacional – p.8/12

Page 29: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Pontos na fronteira

R: raio horizontal saindo de q para x = +∞

Quantas arestas de δP o raio R cruza?

cruza 2 arestas...

cruza 2 arestas...cruza 2 arestas...

cruza 4 arestas...

cruza 4 arestas...

q1

q2

q3

q4

q5

Erra em alguns pontos da fronteira,concluindo que eles estão fora de P ...

Geometria Computacional – p.8/12

Page 30: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Casos especiais

Se aresta éfechada no extremo superior e aberta no inferior.

Geometria Computacional – p.9/12

Page 31: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Casos especiais

Se aresta éfechada no extremo superior e aberta no inferior.

Pontos “em P ”:

Geometria Computacional – p.9/12

Page 32: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Casos especiaisAgora considere ao contrário: que uma aresta éfechada no extremo inferior e aberta no superiore que R vai para x = −∞.

Pontos “em P ”:

Geometria Computacional – p.10/12

Page 33: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Casos especiais

Primeira maneira:acerta no interior das arestas da esquerda e de baixo .

Segunda maneira:acerta no interior das arestas da direita e de cima.

Geometria Computacional – p.11/12

Page 34: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Casos especiais

Primeira maneira:acerta no interior das arestas da esquerda e de baixo .

Segunda maneira:acerta no interior das arestas da direita e de cima.

Interpretando das duas maneiras,acertamos a resposta no interior de todas as arestas!

Geometria Computacional – p.11/12

Page 35: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Casos especiais

Primeira maneira:acerta no interior das arestas da esquerda e de baixo .

Segunda maneira:acerta no interior das arestas da direita e de cima.

Interpretando das duas maneiras,acertamos a resposta no interior de todas as arestas!

Restam os vértices...

Quando q é um dos vértices de P ,a resposta pode ainda estar errada...

Geometria Computacional – p.11/12

Page 36: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Casos especiais

Primeira maneira:acerta no interior das arestas da esquerda e de baixo .

Segunda maneira:acerta no interior das arestas da direita e de cima.

Interpretando das duas maneiras,acertamos a resposta no interior de todas as arestas!

Restam os vértices...

Quando q é um dos vértices de P ,a resposta pode ainda estar errada...

Faça um teste em separadopara ver se q não é um dos vértices de P .

Geometria Computacional – p.11/12

Page 37: Ponto está no polígono? - IME-USPcris/aulas/07_2_331/notas-de-aula/... · P convexo Algoritmo trivial: ... Se o winding number é zero, q não está em P. ... Suponha que q é a

Segunda versão do algoritmoEm-Polígono(P, n)

1 c← 0 d← 0

2 para i← 0 até n− 1 faça3 se P [i][X ] = 0 e P [i][Y ] = 0 então devolva VÉRTICE

4 j ← (i + n− 1) mod n � vértice i− 1

5 testec ← (P [i][Y ] > 0) 6= (P [j][Y ] > 0)

6 tested ← (P [i][Y ] < 0) 6= (P [j][Y ] < 0)

7 se testec ou tested

8 então x← intersecção com eixo x

9 se testec e x > 0 então c← c + 1

10 se tested e x < 0 então d← d + 1

11 se c e d têm paridade distinta12 então devolva EM ARESTA

13 se c é ímpar14 então devolva DENTRO

15 senão devolva FORA

Geometria Computacional – p.12/12