• Nenhum resultado encontrado

Polígonos monótonos

N/A
N/A
Protected

Academic year: 2022

Share "Polígonos monótonos"

Copied!
44
0
0

Texto

(1)

Geometria Computacional

Cristina G. Fernandes

Departamento de Ciência da Computação do IME-USP

http://www.ime.usp.br/˜cris/

segundo semestre de 2018

GeoComp 2018 – p. 1/30

(2)

Polígonos monótonos

Um polígono P é monótono em relação a uma reta L se P ∩ L

é conexo para toda reta L

perpendicular a L .

Se L é o eixo y , dizemos que P é y -monótono.

v0

v1

v2 v3 v4 v5

v6 v7 v8

v9 v10

v11 v12

v13 v14v15 v16

v17 v18

vv1920

GeoComp 2014 – p. 2

(3)

Polígonos monótonos

Um polígono P é monótono em relação a uma reta L se P ∩ L

é conexo para toda reta L

perpendicular a L .

Se L é o eixo y , dizemos que P é y -monótono.

v0

v1

v2 v3 v4 v5

v6 v7 v8

v9 v10

v11 v12

v13 v14v15 v16

v17 v18

vv1920

Sabemos triangular P em tempo linear.

GeoComp 2014 – p. 2

(4)

Triangulação em O(n lg n)

P : polígono arbitrário com n vértices Idéia do algoritmo:

GeoComp 2014 – p. 3

(5)

Triangulação em O(n lg n)

P : polígono arbitrário com n vértices

Idéia do algoritmo:

particionar P em polígonos monótonos triangular cada um deles em tempo linear

GeoComp 2014 – p. 3

(6)

Triangulação em O(n lg n)

P : polígono arbitrário com n vértices

Idéia do algoritmo:

particionar P em polígonos monótonos triangular cada um deles em tempo linear Partição tem que consumir tempo O(n lg n) !

GeoComp 2014 – p. 3

(7)

Triangulação em O(n lg n)

P : polígono arbitrário com n vértices

Idéia do algoritmo:

particionar P em polígonos monótonos triangular cada um deles em tempo linear

Partição tem que consumir tempo O(n lg n) ! Como fazemos isso?

GeoComp 2014 – p. 3

(8)

Triangulação em O(n lg n)

P : polígono arbitrário com n vértices

Idéia do algoritmo:

particionar P em polígonos monótonos triangular cada um deles em tempo linear

Partição tem que consumir tempo O(n lg n) ! Como fazemos isso?

Usando uma trapezoidação especial de P .

GeoComp 2014 – p. 3

(9)

Trapezoidação

Trapézio: quadrilátero com duas arestas paralelas

GeoComp 2014 – p. 4

(10)

Trapezoidação

Trapézio: quadrilátero com duas arestas paralelas Trapezoidação horizontal de um polígono P :

resultado de traçar segmentos horizontais maximais contidos em P , passando por cada vértice de P .

GeoComp 2014 – p. 4

(11)

Trapezoidação

Trapézio: quadrilátero com duas arestas paralelas Trapezoidação horizontal de um polígono P :

resultado de traçar segmentos horizontais maximais contidos em P , passando por cada vértice de P .

GeoComp 2014 – p. 4

(12)

Trapezoidação

Hipótese simplificadora:

não há dois vértices com a mesma Y -coordenada.

GeoComp 2014 – p. 5

(13)

Trapezoidação

Hipótese simplificadora:

não há dois vértices com a mesma Y -coordenada.

Afirmação: todo trapézio tem exatamente dois vértices

de P em sua fronteira (vértices de suporte), um na aresta superior, outro na inferior.

GeoComp 2014 – p. 5

(14)

Representação de mapas retilineares

Como acoplar o algoritmo de triangulação de polígonos monótonos ao algoritmo de Lee e Preparata?

Doubly-connected edge list – DCEL

Cada aresta aparece duas vezes nesta ED: uma vez em cada direção, uma cópia apontando para a outra (twins ou half-edges).

Cada meia-aresta está em uma face do mapa, e aponta para a próxima meia-aresta e a anterior na face.

Pode se manter registro para cada face ou vértice do mapa. Cada face/vértice tem apontador para uma das (meia-)arestas incidentes a ele.

(15)

Representação de mapas retilineares

Como acoplar o algoritmo de triangulação de polígonos monótonos ao algoritmo de Lee e Preparata?

Doubly-connected edge list – DCEL

Cada aresta aparece duas vezes nesta ED: uma vez em cada direção, uma cópia apontando para a outra (twins ou half-edges).

Cada meia-aresta está em uma face do mapa, e aponta para a próxima meia-aresta e a anterior na face.

Pode se manter registro para cada face ou vértice do mapa. Cada face/vértice tem apontador para uma das (meia-)arestas incidentes a ele.

(16)

Representação de mapas retilineares

Como acoplar o algoritmo de triangulação de polígonos monótonos ao algoritmo de Lee e Preparata?

Doubly-connected edge list – DCEL

Cada aresta aparece duas vezes nesta ED: uma vez em cada direção, uma cópia apontando para a outra (twins ou half-edges).

Cada meia-aresta está em uma face do mapa, e aponta para a próxima meia-aresta e a anterior na face.

Pode se manter registro para cada face ou vértice do mapa. Cada face/vértice tem apontador para uma das (meia-)arestas incidentes a ele.

(17)

Representação de mapas retilineares

Como acoplar o algoritmo de triangulação de polígonos monótonos ao algoritmo de Lee e Preparata?

Doubly-connected edge list – DCEL

Cada aresta aparece duas vezes nesta ED: uma vez em cada direção, uma cópia apontando para a outra (twins ou half-edges).

Cada meia-aresta está em uma face do mapa, e aponta para a próxima meia-aresta e a anterior na face.

Pode se manter registro para cada face ou vértice do mapa.

Cada face/vértice tem apontador para uma das (meia-)arestas incidentes a ele.

(18)

Doubly-connected edge list – DCEL

Cada aresta e = uv tem duas entrada na ED: (u, v) e (v, u).

Para cada meia-aresta (u, v): twin(u, v) = (v, u)

prox(u, v): próxima meia-aresta na face prev(u, v): meia-aresta anterior na face

Para cada face f , apontador para uma meia-aresta da face.

Revisite a primeira fase do algoritmo de Lee e Preparata (partição em monótonos) e a adapte para devolver essa representação da partição obtida em vez do conjunto de diagonais apenas.

Omita a face externa da representação, já que ela não é usada na segunda fase.

(19)

Doubly-connected edge list – DCEL

Cada aresta e = uv tem duas entrada na ED: (u, v) e (v, u). Para cada meia-aresta (u, v):

twin(u, v) = (v, u)

prox(u, v): próxima meia-aresta na face prev(u, v): meia-aresta anterior na face

Para cada face f , apontador para uma meia-aresta da face.

Revisite a primeira fase do algoritmo de Lee e Preparata (partição em monótonos) e a adapte para devolver essa representação da partição obtida em vez do conjunto de diagonais apenas.

Omita a face externa da representação, já que ela não é usada na segunda fase.

(20)

Doubly-connected edge list – DCEL

Cada aresta e = uv tem duas entrada na ED: (u, v) e (v, u). Para cada meia-aresta (u, v):

twin(u, v) = (v, u)

prox(u, v): próxima meia-aresta na face prev(u, v): meia-aresta anterior na face

Para cada face f , apontador para uma meia-aresta da face.

Revisite a primeira fase do algoritmo de Lee e Preparata (partição em monótonos) e a adapte para devolver essa representação da partição obtida em vez do conjunto de diagonais apenas.

Omita a face externa da representação, já que ela não é usada na segunda fase.

(21)

Doubly-connected edge list – DCEL

Cada aresta e = uv tem duas entrada na ED: (u, v) e (v, u). Para cada meia-aresta (u, v):

twin(u, v) = (v, u)

prox(u, v): próxima meia-aresta na face prev(u, v): meia-aresta anterior na face

Para cada face f , apontador para uma meia-aresta da face.

Revisite a primeira fase do algoritmo de Lee e Preparata (partição em monótonos) e a adapte para devolver essa representação da partição obtida em vez do conjunto de diagonais apenas.

Omita a face externa da representação, já que ela não é usada na segunda fase.

(22)

Doubly-connected edge list – DCEL

Cada aresta e = uv tem duas entrada na ED: (u, v) e (v, u). Para cada meia-aresta (u, v):

twin(u, v) = (v, u)

prox(u, v): próxima meia-aresta na face prev(u, v): meia-aresta anterior na face

Para cada face f , apontador para uma meia-aresta da face.

Revisite a primeira fase do algoritmo de Lee e Preparata (partição em monótonos) e a adapte para devolver essa representação da partição obtida em vez do conjunto de diagonais apenas.

Omita a face externa da representação, já que ela não é usada na segunda fase.

(23)

Partição em polígonos convexos

Problema: Dado um polígono P, determinar uma partição de P em um número mínimo de partes convexas.

Dois tipos de partição:

I por diagonais de P

I por segmentos arbitrários contidos em P

(24)

Partição em polígonos convexos

Problema: Dado um polígono P, determinar uma partição de P em um número mínimo de partes convexas.

Dois tipos de partição:

I por diagonais de P

I por segmentos arbitrários contidos em P

(25)

Partição em polígonos convexos

Teorema: Seja Φ o menor número de partes convexas em que

um polígono com r vértices reflexos pode ser particionado. Então dr/2e + 1 ≤ Φ ≤ r + 1.

Prova: Feita na aula.

(26)

Partição em polígonos convexos

Teorema: Seja Φ o menor número de partes convexas em que

um polígono com r vértices reflexos pode ser particionado. Então dr/2e + 1 ≤ Φ ≤ r + 1.

Prova: Feita na aula.

(27)

Algoritmo de Hertel e Mehlhorn

Problema: Dado P, determinar uma partição de P por diagonais, em um número mínimo de partes convexas.

Seja Φ o número mínimo de diagonais que resulta em uma partição convexa de P.

Algoritmo de aproximação: produz uma partição convexa de P por diagonais com no máximo αΦ diagonais, e consome tempo polinomial.

Um tal algoritmo é chamado de α-aproximação, e α é sua razão de aproximação.

O algoritmo de Hertel e Mehlhorn produz uma partição de P por diagonais, sempre com no máximo 4Φ diagonais, ou seja, é uma 4-aproximação.

(28)

Algoritmo de Hertel e Mehlhorn

Problema: Dado P, determinar uma partição de P por diagonais, em um número mínimo de partes convexas.

Seja Φ o número mínimo de diagonais que resulta em uma partição convexa de P.

Algoritmo de aproximação: produz uma partição convexa de P por diagonais com no máximo αΦ diagonais, e consome tempo polinomial.

Um tal algoritmo é chamado de α-aproximação, e α é sua razão de aproximação.

O algoritmo de Hertel e Mehlhorn produz uma partição de P por diagonais, sempre com no máximo 4Φ diagonais, ou seja, é uma 4-aproximação.

(29)

Algoritmo de Hertel e Mehlhorn

Problema: Dado P, determinar uma partição de P por diagonais, em um número mínimo de partes convexas.

Seja Φ o número mínimo de diagonais que resulta em uma partição convexa de P.

Algoritmo de aproximação: produz uma partição convexa de P por diagonais com no máximo αΦ diagonais, e consome tempo polinomial.

Um tal algoritmo é chamado de α-aproximação, e α é sua razão de aproximação.

O algoritmo de Hertel e Mehlhorn produz uma partição de P por diagonais, sempre com no máximo 4Φ diagonais, ou seja, é uma 4-aproximação.

(30)

Algoritmo de Hertel e Mehlhorn

Problema: Dado P, determinar uma partição de P por diagonais, em um número mínimo de partes convexas.

Seja Φ o número mínimo de diagonais que resulta em uma partição convexa de P.

Algoritmo de aproximação: produz uma partição convexa de P por diagonais com no máximo αΦ diagonais, e consome tempo polinomial.

Um tal algoritmo é chamado de α-aproximação, e α é sua razão de aproximação.

O algoritmo de Hertel e Mehlhorn produz uma partição de P por diagonais, sempre com no máximo 4Φ diagonais, ou seja, é uma 4-aproximação.

(31)

Algoritmo de Hertel e Mehlhorn

Considere uma partição convexa de P por diagonais.

Vértice reflexo: vértice com ângulo interno maior que π.

Uma diagonal d é essencial para um vértice v se

a remoção de d torna v reflexo (e a partição deixa de ser convexa). Algoritmo de Hertel e Mehlhorn:

Construa uma triangulação de P e

remova, enquanto houver, diagonais não-essenciais. Devolva a partição que resultar disso.

Consumo de tempo: linear, usando o algoritmo de triangulação de Chazelle (que não vimos). Por que ele é uma 4-aproximação?

(32)

Algoritmo de Hertel e Mehlhorn

Considere uma partição convexa de P por diagonais.

Vértice reflexo: vértice com ângulo interno maior que π. Uma diagonal d é essencial para um vértice v se

a remoção de d torna v reflexo (e a partição deixa de ser convexa).

Algoritmo de Hertel e Mehlhorn: Construa uma triangulação de P e

remova, enquanto houver, diagonais não-essenciais. Devolva a partição que resultar disso.

Consumo de tempo: linear, usando o algoritmo de triangulação de Chazelle (que não vimos). Por que ele é uma 4-aproximação?

(33)

Algoritmo de Hertel e Mehlhorn

Considere uma partição convexa de P por diagonais.

Vértice reflexo: vértice com ângulo interno maior que π. Uma diagonal d é essencial para um vértice v se

a remoção de d torna v reflexo (e a partição deixa de ser convexa).

Algoritmo de Hertel e Mehlhorn:

Construa uma triangulação de P e

remova, enquanto houver, diagonais não-essenciais.

Devolva a partição que resultar disso.

Consumo de tempo: linear, usando o algoritmo de triangulação de Chazelle (que não vimos). Por que ele é uma 4-aproximação?

(34)

Algoritmo de Hertel e Mehlhorn

Considere uma partição convexa de P por diagonais.

Vértice reflexo: vértice com ângulo interno maior que π. Uma diagonal d é essencial para um vértice v se

a remoção de d torna v reflexo (e a partição deixa de ser convexa).

Algoritmo de Hertel e Mehlhorn:

Construa uma triangulação de P e

remova, enquanto houver, diagonais não-essenciais.

Devolva a partição que resultar disso.

Consumo de tempo: linear, usando o algoritmo de triangulação de Chazelle (que não vimos).

Por que ele é uma 4-aproximação?

(35)

Algoritmo de Hertel e Mehlhorn

Considere uma partição convexa de P por diagonais.

Vértice reflexo: vértice com ângulo interno maior que π. Uma diagonal d é essencial para um vértice v se

a remoção de d torna v reflexo (e a partição deixa de ser convexa).

Algoritmo de Hertel e Mehlhorn:

Construa uma triangulação de P e

remova, enquanto houver, diagonais não-essenciais.

Devolva a partição que resultar disso.

Consumo de tempo: linear, usando o algoritmo de triangulação de Chazelle (que não vimos).

Por que ele é uma 4-aproximação?

(36)

Algoritmo de Hertel e Mehlhorn

Algoritmo de Hertel e Mehlhorn:

Construa uma triangulação de P e

remova, enquanto houver, diagonais não-essenciais.

Devolva a partição que resultar disso.

Por que ele é uma 4-aproximação?

Lema: Em uma partição convexa por diagonais, existem no máximo duas diagonais essenciais por vértice reflexo. Prova: Feita na aula.

Teorema: O algoritmo de Hertel e Mehlhorn é uma 4-aproximação. Prova: Feita na aula.

(37)

Algoritmo de Hertel e Mehlhorn

Algoritmo de Hertel e Mehlhorn:

Construa uma triangulação de P e

remova, enquanto houver, diagonais não-essenciais.

Devolva a partição que resultar disso.

Por que ele é uma 4-aproximação?

Lema: Em uma partição convexa por diagonais, existem no máximo duas diagonais essenciais por vértice reflexo.

Prova: Feita na aula.

Teorema: O algoritmo de Hertel e Mehlhorn é uma 4-aproximação. Prova: Feita na aula.

(38)

Algoritmo de Hertel e Mehlhorn

Algoritmo de Hertel e Mehlhorn:

Construa uma triangulação de P e

remova, enquanto houver, diagonais não-essenciais.

Devolva a partição que resultar disso.

Por que ele é uma 4-aproximação?

Lema: Em uma partição convexa por diagonais, existem no máximo duas diagonais essenciais por vértice reflexo.

Prova: Feita na aula.

Teorema: O algoritmo de Hertel e Mehlhorn é uma 4-aproximação. Prova: Feita na aula.

(39)

Algoritmo de Hertel e Mehlhorn

Algoritmo de Hertel e Mehlhorn:

Construa uma triangulação de P e

remova, enquanto houver, diagonais não-essenciais.

Devolva a partição que resultar disso.

Por que ele é uma 4-aproximação?

Lema: Em uma partição convexa por diagonais, existem no máximo duas diagonais essenciais por vértice reflexo.

Prova: Feita na aula.

Teorema: O algoritmo de Hertel e Mehlhorn é uma 4-aproximação.

Prova: Feita na aula.

(40)

Algoritmo de Hertel e Mehlhorn

Algoritmo de Hertel e Mehlhorn:

Construa uma triangulação de P e

remova, enquanto houver, diagonais não-essenciais.

Devolva a partição que resultar disso.

Por que ele é uma 4-aproximação?

Lema: Em uma partição convexa por diagonais, existem no máximo duas diagonais essenciais por vértice reflexo.

Prova: Feita na aula.

Teorema: O algoritmo de Hertel e Mehlhorn é uma 4-aproximação.

Prova: Feita na aula.

(41)

Partição convexa ótima

Greene apresentou o primeiro algoritmo que

encontra uma partição convexa por diagonais ótima.

Consumo de tempo: O(r2n2) = O(n4), onde n é o número de vértices e r é o número

de vértices reflexos do polígono.

Posteriormente, Keil propôs um outro algoritmo que encontra uma partição convexa por diagonais ótima. Consumo de tempo: O(r2n lg n).

Os dois algoritmos são de programação dinâmica.

Se a partição é por segmentos, o problema fica mais complicado. Há um algoritmo de Chazelle que consome

tempo O(n + r3) = O(n3) para este caso.

(42)

Partição convexa ótima

Greene apresentou o primeiro algoritmo que

encontra uma partição convexa por diagonais ótima.

Consumo de tempo: O(r2n2) = O(n4), onde n é o número de vértices e r é o número

de vértices reflexos do polígono.

Posteriormente, Keil propôs um outro algoritmo que encontra uma partição convexa por diagonais ótima.

Consumo de tempo: O(r2n lg n).

Os dois algoritmos são de programação dinâmica.

Se a partição é por segmentos, o problema fica mais complicado. Há um algoritmo de Chazelle que consome

tempo O(n + r3) = O(n3) para este caso.

(43)

Partição convexa ótima

Greene apresentou o primeiro algoritmo que

encontra uma partição convexa por diagonais ótima.

Consumo de tempo: O(r2n2) = O(n4), onde n é o número de vértices e r é o número

de vértices reflexos do polígono.

Posteriormente, Keil propôs um outro algoritmo que encontra uma partição convexa por diagonais ótima.

Consumo de tempo: O(r2n lg n).

Os dois algoritmos são de programação dinâmica.

Se a partição é por segmentos, o problema fica mais complicado. Há um algoritmo de Chazelle que consome

tempo O(n + r3) = O(n3) para este caso.

(44)

Partição convexa ótima

Greene apresentou o primeiro algoritmo que

encontra uma partição convexa por diagonais ótima.

Consumo de tempo: O(r2n2) = O(n4), onde n é o número de vértices e r é o número

de vértices reflexos do polígono.

Posteriormente, Keil propôs um outro algoritmo que encontra uma partição convexa por diagonais ótima.

Consumo de tempo: O(r2n lg n).

Os dois algoritmos são de programação dinâmica.

Se a partição é por segmentos, o problema fica mais complicado.

Há um algoritmo de Chazelle que consome tempo O(n + r3) = O(n3) para este caso.

Referências

Documentos relacionados

Observe que, no decágono que ilustra o texto acima, o aluno citado usou vários pedaços de linha para compor os lados e as diagonais do polígono. Cada lado e cada diagonal

Em um hexágono regular foram traçadas duas diagonais e um segmento de reta, cujas extremidades são um ponto sobre um dos lados e um ponto sobre uma das diagonais traçadas,

D8-Resolver problema utilizando propriedades dos polígonos (soma de seus ângulos internos, número de diagonais, cálculo da medida de cada ângulo interno nos

Faço saber à Junta da Administração da Real Fazenda da capitania das Minas Gerais, que havendo-se assentado, em conferência de médicos e cirurgiões no hospital militar desta corte,

As diagonais de um paralelogramo cortam-se

Ø De cada vértice de um polígono de lados, saem diagonais ( ). Ø Em um polígono convexo de lados, o número de triângulos formados por diagonais que saem de

1. Podemos pensar no retângulo, que possui todos os ângulos medindo 90°, mas seus lados não necessariamente possuem a mesma medida. Podemos pensar no losango, que possui todos os

O novo deal traria melhorias não só financeira como operacional para a MEAL3, como (1) sinergias de custos - redução do custo de alimentos devido a otimização