geraÇÃo aleatÓria de polÍgonos geraÇÃo e partiÇÃo de polÍgonos ana gonçalves inês matos...
TRANSCRIPT
GERAÇÃO GERAÇÃO ALEATÓRIA DE ALEATÓRIA DE
POLÍGONOSPOLÍGONOSGERAÇÃO E PARTIÇÃO DE GERAÇÃO E PARTIÇÃO DE
POLÍGONOSPOLÍGONOS
Ana GonçalvesAna Gonçalves
Inês MatosInês Matos
Departamento de Matemática da Universidade de Aveiro
2
DEFINIÇÕEDEFINIÇÕESS
3
Definições
Polígono Monótono: um polígono simples diz-se monótono em relação a alguma direcção se todas as linhas perpendiculares a essa direcção intersectam o polígono, no máximo, em dois pontos ou num intervalo fechado quando coincide com uma aresta.
Exemplos:
x
y
4
Definições
Grafo de Visibilidade: grafo cujos vértices são os mesmos do polígono simples e onde dois vertices são adjacentes se são mutuamente visíveis. As arestas deste grafo são chamadas de arestas de visibilidade e o número de arestas deste grafo será denotado por K.
Exemplo:
v
5
Definições
Heurística: também algoritmo heurístico, utiliza-se quando existe um procedimento que encontra uma boa solução para resolver um certo problema. No entanto, essa solução pode não ser óptima e pode mesmo dar-se o caso do procedimento não encontrar qualquer solução (apesar dela existir).
Posição Geral: um conjunto de pontos está em posição geral se não existirem três pontos colineares ou quatro pontos cocirculares.
6
GERAÇÃO GERAÇÃO DE DE
POLÍGONOPOLÍGONOSS
7
Geração de Polígonos
Por geração uniforme de polígonos aleatórios entende-se que cada polígono gerado tem probabilidade 1/k de ocorrer, se existirem k polígonos possíveis.
A geração uniforme de polígonos aleatórios é um problema para o qual não se conhece solução polinomial.
Sendo assim, temos que recorrer a heurísticas para gerar polígonos. No entanto, a heurística que escolhemos deve ser condicionada pela solução que queremos obter.
8
Geração de Polígonos
Que tipo de polígono queremos gerar?
Qual a característica que queremos impôr ao polígono final?
Simples Monótono Estrelado Ortogonal Convexo...
Polígono com n vértices Polígono com n vértices reflexos Polígono a partir de um dado conjunto de pontos Polígono com uma dada área...
9
Geração de Polígonos Simples
Sobre este problema existem dois trabalhos que se evidenciam dos restantes. Ambos partem de um conjunto S de pontos no plano (em posição geral) que são os vértices do polígono simples final.
O trabalho mais conhecido é o RPG – Heuristics for the Generation of Random Polygons de Thomas Auer e Martin Held. Nele podemos encontrar diversas heurísticas para gerar polígonos simples.
http://www.cosy.sbg.ac.at/~held/projects/rpg/rpg.html
10
Geração de Polígonos Estrelados
Star Universe(gera todos os polígonos estrelados possíveis)
Quick Star – O(nlogn)(gera uniformemente todos os polígonos estrelados possíveis)
Um polígono estrelado é determinado pelo seu núcleo. O conjunto de todos os núcleos forma uma partição do invólucro convexo. Para gerar todos os polígonos estrelados, trabalha-se sobre esta partição. A complexidade deste algoritmo é elevada.
Star Universe
11
Geração de Polígonos Estrelados
Quick Star
12
Geração de Polígonos Estrelados
Quick Star Determina o invólucro convexo
13
Geração de Polígonos Estrelados
Quick Star Escolhe um ponto interior
p0
14
Geração de Polígonos Estrelados
Quick Star Ordena os restantes pontos em torno desse ponto interior
p0
p1
15
Geração de Polígonos Estrelados
Quick Star Ordena os restantes pontos em torno desse ponto interior
p0
p1
p2
16
Geração de Polígonos Estrelados
Quick Star Ordena os restantes pontos em torno desse ponto interior
p0
p1
p2
p3
17
Geração de Polígonos Estrelados
Quick Star Ordena os restantes pontos em torno desse ponto interior
p0
p1
p2
p3p4
18
Geração de Polígonos Estrelados
Quick Star Ordena os restantes pontos em torno desse ponto interior
p0
p1
p2
p3p4
p5
19
Geração de Polígonos Estrelados
Quick Star Ordena os restantes pontos em torno desse ponto interior
p0
p1
p2
p3p4
p5
p6
20
Geração de Polígonos Estrelados
Quick Star Ordena os restantes pontos em torno desse ponto interior
p0
p1
p2
p3p4
p5
p6
p7
21
Geração de Polígonos Estrelados
Quick Star Ordena os restantes pontos em torno desse ponto interior
p0
p1
p2
p3p4
p5
p6
p7
p8
22
Geração de Polígonos Estrelados
Quick Star Ordena os restantes pontos em torno desse ponto interior
p0
p1
p2
p3p4
p5
p6
p7
p8
p9
23
Geração de Polígonos Estrelados
Quick Star Ordena os restantes pontos em torno desse ponto interior
p0
p1
p2
p3p4
p5
p6
p7
p8
p9p10
24
Geração de Polígonos Estrelados
Quick Star Ligar os pontos por ordem
p0
p1
p2
p3p4
p5
p6
p7
p8
p9p10
25
Geração de Polígonos Estrelados
Quick Star
p0
p1
p2
p3p4
p5
p6
p7
p8
p9p10
Ligar os pontos por ordem
26
Geração de Polígonos Estrelados
Quick Star
p0
p1
p2
p3p4
p5
p6
p7
p8
p9p10
Ligar os pontos por ordem
27
Geração de Polígonos Estrelados
Quick Star Ligar os pontos por ordem
p0
p1
p2
p3p4
p5
p6
p7
p8
p9p10
28
Geração de Polígonos Estrelados
Quick Star Ligar os pontos por ordem
p0
p1
p2
p3p4
p5
p6
p7
p8
p9p10
29
Geração de Polígonos Estrelados
Quick Star Ligar os pontos por ordem
p0
p1
p2
p3p4
p5
p6
p7
p8
p9p10
30
Geração de Polígonos Estrelados
Quick Star Ligar os pontos por ordem
p0
p1
p2
p3p4
p5
p6
p7
p8
p9p10
31
Geração de Polígonos Estrelados
Quick Star Ligar os pontos por ordem
p0
p1
p2
p3p4
p5
p6
p7
p8
p9p10
32
Geração de Polígonos Estrelados
Quick Star Ligar os pontos por ordem
p0
p1
p2
p3p4
p5
p6
p7
p8
p9p10
33
Geração de Polígonos Estrelados
Quick Star Ligar os pontos por ordem
p0
p1
p2
p3p4
p5
p6
p7
p8
p9p10
34
Geração de Polígonos Estrelados
Quick Star Ligar os pontos por ordem
p0
p1
p2
p3p4
p5
p6
p7
p8
p9p10
35
Geração de Polígonos Estrelados
Quick Star Polígono Estrelado Final
O(nlogn)
36
Geração de Polígonos Simples
Steady Growth – O(n2)(não gera todos os polígonos simples possíveis)
Space Partitioning – O(nlogn)(não gera todos os polígonos possíveis)
Permute & Reject - O(nlogn) (gera todos os polígonos possíveis uniformemente)
2-Opt Moves - O(n3)(gera todos os polígonos possíveis embora não seja uniforme)
Incremental Construction & Backtracking
37
Geração de Polígonos Simples
Steady Growth
38
Geração de Polígonos Simples
Steady Growth Encontrar três pontos que formem um triângulo vazio
s1
s2
s3
39
Geração de Polígonos Simples
Steady Growth Escolher um ponto si tal que não exista nenhum
ponto de S\{s1,s2,s3} interior a CH(s1,s2,s3,s4)
s1
s2
s3
s4
40
Geração de Polígonos Simples
Steady Growth Encontrar uma aresta do polígono já formado que seja completamente visível para si
s1
s2
s3
s4
41
Geração de Polígonos Simples
Steady Growth Criar duas novas arestas e ir acrescentando os vários pontos, um a um, ao polígono já formado
s1
s2
s3
s4
42
Geração de Polígonos Simples
Steady Growth Continuar com este procedimento para todos os diferentes pontos
s1
s2
s3
s4
s5
43
Geração de Polígonos Simples
Steady Growth Continuar com este procedimento para todos os diferentes pontos
s1
s2
s3
s4
s5
s6
44
s7
Geração de Polígonos Simples
Steady Growth Continuar com este procedimento para todos os diferentes pontos
s1
s2
s3
s4
s5
s6
45
s7
Geração de Polígonos Simples
Steady Growth Continuar com este procedimento para todos os diferentes pontos
s1
s2
s3
s4
s5
s6
s8
46
s7
Geração de Polígonos Simples
Steady Growth Continuar com este procedimento para todos os diferentes pontos
s1
s2
s3
s4
s5
s6
s8
s9
47
s7
Geração de Polígonos Simples
Steady Growth Continuar com este procedimento para todos os diferentes pontos
s1
s2
s3
s4
s5
s6
s8
s9
s10
48
s7
Geração de Polígonos Simples
Steady Growth Continuar com este procedimento para todos os diferentes pontos
s1
s2
s3
s4
s5
s6
s8
s9
s10
s11
49
Geração de Polígonos Simples
Steady Growth Polígono Simples Final
O(n2)
50
Geração de Polígonos Simples
Space Partitioning Escolher dois pontos aleatórios
i1
f1
51
Geração de Polígonos Simples
Space Partitioning Separar os pontos de S em dois conjuntos
i1
f1
52
Geração de Polígonos Simples
Space Partitioning
i1
f1
Separar os pontos de S em dois conjuntos
53
Geração de Polígonos Simples
Space Partitioning Escolher um ponto x1 do conjunto da esquerda
i1
f1
x1
54
Geração de Polígonos Simples
Space Partitioning Dividir os pontos deste conjunto através de uma recta que passa por x1 e intersecta a recta inicial
i1
f1
x1
55
Geração de Polígonos Simples
Space Partitioning Dividir os pontos deste conjunto através de uma recta que passa por x1 e intersecta a recta inicial
i1
f1
x1
56
Geração de Polígonos Simples
Space Partitioning Continuar com este processo até existir um conjunto vazio
i1
f1
x1
x2
57
Geração de Polígonos Simples
Space Partitioning A aresta é formada pelo início e fim do conjunto em questão
i1
f1
x1
x2
58
Geração de Polígonos Simples
Space Partitioning A aresta é formada pelo início e fim do conjunto em questão
i1
f1
x1
x2
x3
59
Geração de Polígonos Simples
Space Partitioning
i1
f1
x1
x2
x3
60
Geração de Polígonos Simples
Space Partitioning
i1
f1
x1
x2
x3 x4
61
Geração de Polígonos Simples
Space Partitioning
i1
f1
x1
x2
x3 x4
x5
62
Geração de Polígonos Simples
Space Partitioning
i1
f1
x1
x2
x3 x4
x5
63
x6
Geração de Polígonos Simples
Space Partitioning
f2
i2
x1
x2
x3 x4
x5
O início e o fim trocam para o conjunto da direita
64
Geração de Polígonos Simples
Space Partitioning
f2
i2
x1
x2
x3 x4
x5
x6
x7
65
Geração de Polígonos Simples
Space Partitioning
f2
i2
x1
x2
x3 x4
x5
x6
x7
66
Geração de Polígonos Simples
Space Partitioning
f2
i2
x1
x2
x3 x4
x5
x6
x7
67
x6
Geração de Polígonos Simples
Space Partitioning
f2
i2
x1
x2
x3 x4
x5x7
x8
68
x6
Geração de Polígonos Simples
Space Partitioning
f2
i2
x1
x2
x3 x4
x5x7
x8
x9
69
x9
x6
Geração de Polígonos Simples
Space Partitioning
f2
i2
x1
x2
x3 x4
x5x7
x8
70
Geração de Polígonos Simples
Space Partitioning Polígono Simples Final
O(nlogn)
71
Geração de Polígonos Simples
Permute & Reject
Começa por calcular uma permutação dos índices dos pontos (pode ser feita em tempo linear).
De seguida liga os pontos pela ordem da permutação e depois verifica se gerou ou não um polígono simples.
Se o polígono final não for simples, então gera uma nova permutação de índices.
A verificação da existência de intersecções no polígono também é feita em tempo linear, mas o tempo real do método depende apenas de quantos polígonos necessitam ser gerados até encontrar um que seja realmente simples.
72
Geração de Polígonos Simples
2-Opt Moves
73
Geração de Polígonos Simples
2-Opt Moves Ligar os pontos de S aleatoriamente, por exemplo, pela ordem por que foram gerados
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
74
Geração de Polígonos Simples
2-Opt Moves Como não resultou num polígono simples, procura uma intersecção, por ex, s2s3 e s1s11
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
75
Geração de Polígonos Simples
2-Opt Moves Desfaz as intersecções criando as arestas s11s3 e
s1s2 ou s1s3 e s2s11.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
76
Geração de Polígonos Simples
2-Opt Moves Desfaz as intersecções criando as arestas s11s3 e
s1s2 ou s1s3 e s2s11.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
77
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
78
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
79
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
80
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
81
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
82
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
83
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
84
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
85
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
86
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
87
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
88
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
89
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
90
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
91
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
92
Geração de Polígonos Simples
2-Opt Moves Continua com este processo de modo a desfazer as ligações sem desconexar o polígono.
s1
s2
s3
s4
s5
s6
s7
s8
s9
s10
s11
93
Geração de Polígonos Simples
2-Opt Moves Polígono Simples Final
O(n3)
94
Geração de Polígonos Simples
Incremental Construction & BacktrackingEscolher dois pontos aleatoriamente e uni-los. Prosseguir escolhendo um ponto aleatório e ligando aos anteriores enquanto a cadeia se mantiver simples. Aplicar backtracking quando existir uma intersecção.
Obviamente, um dos objectivos principais é evitar o backtracking exaustivo.
Este algoritmo gera todos os polígonos simples possíveis com boa probabilidade. A sua eficiência depende do número de backtrackings que foram necessários.
95
Geração de Polígonos Simples
Existe ainda uma heurística que é uma adaptação do algoritmo Steady Growth. Esta encontra-se no trabalho Generación de Polígonos Aleatorios de Pau Sanchez Campello.
Partition Growth - O(t log t)(gera polígonos com pelo menos n vértices)
t é o número de vértices a mover sobre uma recta
96
Geração de Polígonos Simples
Partition Growth Número mínimo de vértices do polígono é 10.
Gerar um polígono com três vértices.
97
Geração de Polígonos Simples
Partition Growth Gerar uma recta que intersecte o polígono
98
Geração de Polígonos Simples
Partition Growth Determinar os pontos de intersecção entre a recta e o polígono.
99
Geração de Polígonos Simples
Partition Growth Dividir em dois as arestas do polígono que são intersectadas pela recta
100
Geração de Polígonos Simples
Partition Growth Deslocar aleatoriamente todos os pontos de intersecção sobre a recta, mantendo a ordem relativa das intersecções (para não produzir novas intersecções).
101
Geração de Polígonos Simples
Partition Growth O número de pontos é menor que 10.Gerar outra recta que intersecte o polígono.
102
Geração de Polígonos Simples
Partition Growth Determinar os pontos de intersecção entre a recta e o polígono.
103
Geração de Polígonos Simples
Partition Growth Dividir em dois as arestas do polígono que são intersectadas pela recta
104
Geração de Polígonos Simples
Partition Growth Deslocar aleatoriamente todos os pontos de intersecção sobre a recta, mantendo a ordem relativa das intersecções (para não produzir novas intersecções).
105
Geração de Polígonos Simples
Partition Growth Número de pontos é menor que 10.Gerar uma recta que intersecte o polígono.
106
Geração de Polígonos Simples
Partition Growth Determinar os pontos de intersecção entre a recta e o polígono.
107
Geração de Polígonos Simples
Partition Growth Dividir em dois as arestas do polígono que são intersectadas pela recta
108
Geração de Polígonos Simples
Partition Growth Deslocar aleatoriamente todos os pontos de intersecção sobre a recta mantendo a ordem relativa das intersecções (para não produzir novas intersecções).
109
Geração de Polígonos Simples
Partition Growth Número de pontos é maior que 10.
O(t log t)
110
Existe outra heurística para gerar polígonos estrelados que é apresentada em Generating Random Star-Shaped Polygons de Christian Sohler.
Las Vegas – O(n2logn)
A heurística constrói uma partição do plano que define todos os núcleos de polígonos estrelados (não degenerados) num conjunto de pontos S. Trabalhando sobre esta partição, podemos gerar todos os polígonos estrelados.
Geração de Polígonos Estrelados
111
Geração de Polígonos
O outro trabalho tem o nome de POPS - Polygonalizations of Point Sets de G.T. Toussaint, V. Sitaru, T. Ruso. Nele podemos encontrar outras heurísticas para gerar polígonos simples aleatoriamente.
http://www.cs.mcgill.ca/~ktulu/507/
Convex Bottom - O(nlogn)(não gera todos os polígonos simples possíveis)
Two Peasants - O(nlogn)(não gera todos os polígonos simples possíveis)
Radar Sweep - O(nlogn)(não gera todos os polígonos estrelados possíveis)
112
Geração de Polígonos Simples
Convex Bottom
113
Geração de Polígonos Simples
Convex Bottom Encontrar os pontos de menor e maior abcissa
xmin
xmax
114
Geração de Polígonos Simples
Convex Bottom
xmin
xmax
Criar uma recta e dividir os pontos
115
Geração de Polígonos Simples
Convex Bottom
xmin
xmax
Criar uma recta e dividir os pontos
116
Geração de Polígonos Simples
Convex Bottom
xmin
xmax
Criar o invólucro convexo de um dos grupos de pontos
117
Geração de Polígonos Simples
Convex Bottom
xmin
xmax
Ligar os restantes pontos através da sua abcissa
118
Geração de Polígonos Simples
Convex Bottom Polígono Simples Final
O(nlogn)
119
Geração de Polígonos Simples
Two Peasants
120
Geração de Polígonos Simples
Two Peasants Encontrar os pontos de menor e maior abcissa
xmin
xmax
121
Geração de Polígonos Simples
Two Peasants Criar uma recta e dividir os pontos
xmin
xmax
122
Geração de Polígonos Simples
Two Peasants Criar uma recta e dividir os pontos
xmin
xmax
123
Geração de Polígonos Simples
Two Peasants Ligar cada conjunto através da sua abcissa
xmin
xmax
124
Geração de Polígonos Simples
Two Peasants Ligar cada conjunto através da sua abcissa
xmin
xmax
125
Geração de Polígonos Simples
Two Peasants Ligar cada conjunto aos extremos
xmin
xmax
126
Geração de Polígonos Simples
Two Peasants Polígono Simples Final
O(nlogn)
127
Geração de Polígonos Estrelados
Radar Sweep
128
Geração de Polígonos Estrelados
Radar Sweep Encontrar o ponto de menor abcissa
xmin
129
Geração de Polígonos Estrelados
Radar Sweep Ordenar os pontos em redor de p0 = xmin
p0
130
Geração de Polígonos Estrelados
Radar Sweep Ordenar os pontos em redor de p0 = xmin
p0
p1
131
Geração de Polígonos Estrelados
Radar Sweep Ordenar os pontos em redor de p0 = xmin
p0
p1
p2
132
Geração de Polígonos Estrelados
Radar Sweep Ordenar os pontos em redor de p0 = xmin
p0
p1
p2
p3
133
Geração de Polígonos Estrelados
Radar Sweep Ordenar os pontos em redor de p0 = xmin
p0
p1
p2
p3 p4
134
Geração de Polígonos Estrelados
Radar Sweep Ordenar os pontos em redor de p0 = xmin
p0
p1
p2
p3 p4
p5
135
Geração de Polígonos Estrelados
Radar Sweep Ordenar os pontos em redor de p0 = xmin
p0
p1
p2
p3 p4
p5 p6
136
Geração de Polígonos Estrelados
Radar Sweep Ordenar os pontos em redor de p0 = xmin
p0
p1
p2
p3 p4
p5 p6
p7
137
Geração de Polígonos Estrelados
Radar Sweep Ordenar os pontos em redor de p0 = xmin
p0
p1
p2
p3 p4
p5 p6
p7
p8
138
Geração de Polígonos Estrelados
Radar Sweep Ordenar os pontos em redor de p0 = xmin
p0
p1
p2
p3 p4
p5 p6
p7
p8p9
139
Geração de Polígonos Estrelados
Radar Sweep Ordenar os pontos em redor de p0 = xmin
p0
p1
p2
p3 p4
p5 p6
p7
p8
p10
p9
140
Geração de Polígonos Estrelados
Radar Sweep Ligar os pontos pela ordem que foram encontrados (ordem dada pelos índices)
p0
p1
p2
p3 p4
p5 p6
p7
p8
p10
p9
141
Geração de Polígonos Estrelados
Radar Sweep Ligar o primeiro ponto ao último
p0
p1
p2
p3 p4
p5 p6
p7
p8
p10
p9
142
Geração de Polígonos Estrelados
Radar Sweep Polígono Estrelado Final
O(nlogn)
143
Geração de Polígonos Ortogonais
Em 2000, Joseph O’Rourke estava a estudar a partição de polígonos ortogonais (de onde resultou o artigo Partitioning Ortogonal Polygons into Fat Rectangles) e, para isso, criou um gerador que foi baptizado de ROP – Random Orthogonal Polygon e implementado em LISP.
Este gerador não gera polígonos através de um conjunto de vértices mas sim através de uma grelha que vai sendo preenchida (a selecção aleatória das células é feita por heurísticas). A grelha tem NX por NY células e o resultado final é um polígono cuja área contém n células. O número final de vértices não é controlado, até porque os pontos colineares só são retirados depois do polígono estar gerado.
Não sabemos qual a complexidade do algoritmo, mas deve ser aproximadamente linear pois este é extremamente rápido a obter polígonos ortogonais para um elevado número de células.
144
Geração de Polígonos Ortogonais
Em 2003 surge o trabalho de Ana P. Tomás e de Antonio L. Bajuelos, onde apresentam dois geradores de polígonos ortogonais no artigo Quadratic-Time Linear-Space Algorithms for Generating Orthogonal Polygons with a Given Number of Vertices. Qualquer dos geradores permite controlar o número final de vértices do polígono.
Inflate-Cut - O(n2)(gera todos os polígonos possíveis numa grelha)
Inflate-Paste - O(n2)(gera todos os polígonos possíveis numa grelha)
145
Geração de Polígonos Ortogonais
Inflate-Cut O algoritmo começa numa célula única que vai alargando. Para efeitos de exemplo, começa-se já com uma parte do polígono formada
146
Inflate-Cut Escolhe uma célula interior aleatória
Geração de Polígonos Ortogonais
147
Inflate-Cut A célula escolhida vai “inchar” (inflate)
Geração de Polígonos Ortogonais
148
Inflate-Cut A célula escolhida vai “inchar” (inflate)
Geração de Polígonos Ortogonais
149
Inflate-Cut Procura as peças que podem ser cortadas (cut). Uma peça pode cortar-se se apenas contiver um vértice do polígono
Geração de Polígonos Ortogonais
1 2
34
150
Inflate-Cut Corta a peça escolhida e obtém outro polígono ortogonal
Geração de Polígonos Ortogonais
151
Inflate-Cut Corta a peça escolhida e obtém outro polígono ortogonal
Geração de Polígonos Ortogonais
152
Inflate-Cut Corta a peça escolhida e obtém outro polígono ortogonal
Geração de Polígonos Ortogonais
153
Inflate-Cut Corta a peça escolhida e obtém outro polígono ortogonal
Geração de Polígonos Ortogonais
154
Inflate-Cut Corta a peça escolhida e obtém outro polígono ortogonal
Geração de Polígonos Ortogonais
155
Inflate-Cut Corta a peça escolhida e obtém outro polígono ortogonal
Geração de Polígonos Ortogonais
156
Inflate-Cut Corta a peça escolhida e obtém outro polígono ortogonal
Geração de Polígonos Ortogonais
157
Inflate-Cut Corta a peça escolhida e obtém outro polígono ortogonal
Geração de Polígonos Ortogonais
O(n2)
158
Geração de Polígonos Ortogonais
Inflate-Paste O algoritmo começa por escolher um vértice convexo v do polígono
v
159
Geração de Polígonos Ortogonais
Inflate-Paste Selecciona uma célula que se encontra em FSN(v).
v
Por FSN(v) entende-se o maior polígono em escada nesta grelha que tem v como vértice, não intersecta o interior do polígono e a aresta horizontal adjacente ao vértice tem que fazer parte do lado do polígono.
160
Geração de Polígonos Ortogonais
Inflate-Paste Depois de seleccionada a célula, determina o ponto central da peça e cria um novo rectângulo definido pelo vértice v e pelo ponto central determinado.
161
Geração de Polígonos Ortogonais
Inflate-Paste Polígono resultante.
162
Geração de Polígonos Ortogonais
Inflate-Paste Depois de seleccionada a célula, determina o ponto central da peça e cria um novo rectângulo definido pelo vértice v e pelo ponto central determinado.
163
Geração de Polígonos Ortogonais
Inflate-Paste Polígono resultante.
164
Geração de Polígonos Ortogonais
Inflate-Paste Depois de seleccionada a célula, determina o ponto central da peça e cria um novo rectângulo definido pelo vértice v e pelo ponto central determinado.
165
Geração de Polígonos Ortogonais
Inflate-Paste Polígono resultante.
166
Geração de Polígonos Ortogonais
Inflate-Paste Depois de seleccionada a célula, determina o ponto central da peça e cria um novo rectângulo definido pelo vértice v e pelo ponto central determinado.
167
Geração de Polígonos Ortogonais
Inflate-Paste Polígono resultante.
168
Geração de Polígonos Ortogonais
Inflate-Paste Depois de seleccionada a célula, determina o ponto central da peça e cria um novo rectângulo definido pelo vértice v e pelo ponto central determinado.
169
Geração de Polígonos Ortogonais
Inflate-Paste Polígono resultante.
170
Geração de Polígonos Ortogonais
Inflate-Paste Depois de seleccionada a célula, determina o ponto central da peça e cria um novo rectângulo definido pelo vértice v e pelo ponto central determinado.
171
Geração de Polígonos Ortogonais
Inflate-Paste Polígono resultante.
172
Geração de Polígonos Ortogonais
Inflate-Paste Depois de seleccionada a célula, determina o ponto central da peça e cria um novo rectângulo definido pelo vértice v e pelo ponto central determinado.
173
Geração de Polígonos Ortogonais
Inflate-Paste Polígono resultante.
174
Geração de Polígonos Ortogonais
Inflate-Paste Depois de seleccionada a célula, determina o ponto central da peça e cria um novo rectângulo definido pelo vértice v e pelo ponto central determinado.
175
Geração de Polígonos Ortogonais
Inflate-Paste Polígono resultante.
O(n2)
176
Geração de Polígonos Ortogonais
Também existe uma alteração ao algoritmo Inflate-Cut, dos mesmos autores, que impõe restrições à geração de polígonos. Um exemplo de um polígono final simétrico pode ver-se na figura seguinte:
177
Geração de Polígonos Ortogonais
No trabalho anterior existe também uma referência a um trabalho de M. Filgueiras cuja apresentação foi apenas oral.
A ideia do algoritmo para gerar polígonos ortogonais é semelhante à do algoritmo de O’Rourke. Este algoritmo une rectângulos de áreas superiores à das células da grelha, permitindo a sobreposição dos rectângulos.
178
Geração de Polígonos Monótonos
Chong Zu e outros apresentam um trabalho denominado Generating Polygons with Given Vertices que consegue gerar aleatoriamente polígonos monótonos em tempo linear.
Parte-se do pressuposto que Sn é um conjunto de n pontos no plano que estão ordenados segundo a sua abcissa (supõe-se também que não existem dois pontos com a mesma abcissa).A ideia do algoritmo é fazer um varrimento da cadeia monótona da esquerda para a direita (de s1 até sn) e contar o número de
polígonos monótonos possíveis neste conjunto S. Escolher um número aleatório dentro do intervalo possível e desenhar o respectivo polígono, desta vez, da direita para a esquerda.
Usando este algoritmo, conseguimos contar o número de polígonos monótonos existentes, consequentemente, conseguimos gerar uniformemente polígonos monótonos aleatórios. Este trabalho é então a solução para o problema da geração aleatória de polígonos monótonos e não apenas uma heurística.
179
Geração de Polígonos Monótonos
Seja então Si o subconjunto de S, 1 i n. Qualquer polígono monótono pode ser dividido em duas cadeias monótonas: cadeia superior e a cadeia inferior. É claro que os pontos extremos (s1 e si) pertencem a ambas as cadeias e são os únicos nestas condições.
s1
s2
s3
s4
s5
s6
s7
Contagem (O(n) espaço e O(K) tempo)
A contagem é recursiva, sabemos quantos polígonos existem em Si ,
N(i) através de N(j) , ou seja, do número de polígonos monótonos que existem em Sj , j<i. Para isto, divide-se o tipo de polígonos monótonos existentes em dois conjuntos.
180
Geração de Polígonos Monótonos
Estes dois conjuntos são T(i) e B(i). T(i) é o conjunto de polígonos monótonos cuja aresta si-1si pertence à cadeira superior (top) e B(i) é o conjunto onde a mesma aresta pertence à cadeia inferior (bottom).
s1
s2
s3
s4
s5
s6
s7
Contagem (O(n) espaço e O(K) tempo)
Sai então que N(k) = |T(k)| + |B(k)| = T(k) + B(k).
T(7)
s1
s2
s3
s4
s5
s6
s7
B(7)
181
Geração de Polígonos Monótonos
Cada um deles é calculado através de VT(k) e VB(k) . O primeiro é o
conjunto de todos os pontos que sk “vê em cima” e o segundo o
conjunto de pontos que sk “vê em baixo”.
Contagem (O(n) espaço e O(K) tempo)
Basicamente, VT(k) é o conjunto de todos os pontos visíveis para sk
que se encontrem acima da linha sjsk , i < j < k. VB(k) é semelhante mas os pontos têm que se encontrar abaixo da referida linha.
VT(8) = {6}VB(8) = {3,5}
s1
s2
s3
s4
s5
s6
s7
s8
182
Geração de Polígonos Monótonos
Daqui sai então que:
Contagem (O(n) espaço e O(K) tempo)
Cada um destes conjuntos é calculado e guardado sob a forma de uma árvore binária. Cada conjunto superior é calculado à custa do inferior e vice-versa, como se pode observar.
)(
|)1(| |)(|kVj B
jBkT
|)1(| |)(|)(
kVj T
jTkB
183
Geração de Polígonos Monótonos
Geração (O(n) espaço e tempo)
• Escolhe x [1, N(n)] aleatoriamente
• Acrescenta sn à cadeia superior e à cadeia inferior
• Constrói o polígono da direita para a esquerda: - se x T(n) então começa pela cadeira superior (sn-1 pertence à cadeia superior) - senão, x = x - T(n) e começa pela cadeia inferior (sn-1 pertence à cadeia inferior)
• Constrói as cadeias através de dois procedimentos recursivos: Generate_Top e Generate_Bottom que se chamam mutuamente
• Acrescenta s1 à cadeia por onde começou
184
Geração de Polígonos Monótonos
O algoritmo anterior pode ser modificado para gerar um polígono monótono dentro de outro polígono monótono. Neste caso a complexidade sobe para O(n + |P|), sendo |P| o número de vértices do polígono monótono exterior.
185
Geração de Polígonos Convexos
No mesmo trabalho é referido um método de complexidade O(n3) para gerar polígonos convexos. Este consiste em determinar um subconjunto de pontos de S que forme um polígono convexo.
186
APLICAÇÕEAPLICAÇÕESS
187
Aplicações
Avaliação prática de algoritmos relativos à manipulação de polígonos:
verificação da sua exactidão determinação do tempo de execução
O problema da geração aleatória de polígonos é então motivado pela necessidade de gerar instâncias de teste para algoritmos geométricos. Por exemplo, para testar algoritmos de iluminação, partição ou intersecção de polígonos. A geração de polígonos monótonos dentro de outros polígonos monótonos é particularmente relevante para testar algoritmos relacionados com aspectos geográficos (GIS - Geographical Information Systems) .
188
AppletApplet
http://web.informatik.uni-bonn.de/I/GeomLab/polygon/RandomPhttp://web.informatik.uni-bonn.de/I/GeomLab/polygon/RandomPolygon.html.enolygon.html.en