Carregar apresentação
A apresentação está carregando. Por favor, espere
1
GERAÇÃO ALEATÓRIA DE POLÍGONOS
Departamento de Matemática da Universidade de Aveiro GERAÇÃO ALEATÓRIA DE POLÍGONOS GERAÇÃO E PARTIÇÃO DE POLÍGONOS Ana Gonçalves Inês Matos
2
DEFINIÇÕES
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: y x
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 Posição Geral: um conjunto de pontos está em posição geral se não existirem três pontos colineares ou quatro pontos cocirculares. 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).
6
GERAÇÃO DE POLÍGONOS
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
Que tipo de polígono queremos gerar?
Geração de Polígonos Que tipo de polígono queremos gerar? Simples Monótono Estrelado Ortogonal Convexo ... Qual a característica que queremos impôr ao polígono final? 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.
10
Star Universe Star Universe
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) Star Universe 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.
11
Geração de Polígonos Estrelados
Quick Star
12
Quick Star Geração de Polígonos Estrelados
Determina o invólucro convexo
13
Quick Star p0 Geração de Polígonos Estrelados
Escolhe um ponto interior p0
14
Quick Star p0 p1 Geração de Polígonos Estrelados
Ordena os restantes pontos em torno desse ponto interior p0 p1
15
Quick Star p2 p0 p1 Geração de Polígonos Estrelados
Ordena os restantes pontos em torno desse ponto interior p2 p0 p1
16
Quick Star p3 p2 p0 p1 Geração de Polígonos Estrelados
Ordena os restantes pontos em torno desse ponto interior p3 p2 p0 p1
17
Quick Star p3 p4 p2 p0 p1 Geração de Polígonos Estrelados
Ordena os restantes pontos em torno desse ponto interior p3 p4 p2 p0 p1
18
Quick Star p5 p3 p4 p2 p0 p1 Geração de Polígonos Estrelados
Ordena os restantes pontos em torno desse ponto interior p5 p3 p4 p2 p0 p1
19
Quick Star p5 p3 p4 p2 p6 p0 p1 Geração de Polígonos Estrelados
Ordena os restantes pontos em torno desse ponto interior p5 p3 p4 p6 p2 p0 p1
20
Quick Star p5 p3 p4 p2 p6 p0 p1 p7 Geração de Polígonos Estrelados
Ordena os restantes pontos em torno desse ponto interior p5 p3 p4 p6 p2 p0 p1 p7
21
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p7 Geração de Polígonos Estrelados
Ordena os restantes pontos em torno desse ponto interior p5 p3 p4 p6 p2 p0 p1 p8 p7
22
Geração de Polígonos Estrelados
Quick Star Ordena os restantes pontos em torno desse ponto interior p5 p3 p4 p6 p2 p0 p1 p8 p9 p7
23
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p10 p9 p7
Geração de Polígonos Estrelados Quick Star Ordena os restantes pontos em torno desse ponto interior p5 p3 p4 p6 p2 p0 p1 p8 p10 p9 p7
24
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p10 p9 p7
Geração de Polígonos Estrelados Quick Star Ligar os pontos por ordem p5 p3 p4 p6 p2 p0 p1 p8 p10 p9 p7
25
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p10 p9 p7
Geração de Polígonos Estrelados Quick Star Ligar os pontos por ordem p5 p3 p4 p6 p2 p0 p1 p8 p10 p9 p7
26
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p10 p9 p7
Geração de Polígonos Estrelados Quick Star Ligar os pontos por ordem p5 p3 p4 p6 p2 p0 p1 p8 p10 p9 p7
27
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p10 p9 p7
Geração de Polígonos Estrelados Quick Star Ligar os pontos por ordem p5 p3 p4 p6 p2 p0 p1 p8 p10 p9 p7
28
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p10 p9 p7
Geração de Polígonos Estrelados Quick Star Ligar os pontos por ordem p5 p3 p4 p6 p2 p0 p1 p8 p10 p9 p7
29
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p10 p9 p7
Geração de Polígonos Estrelados Quick Star Ligar os pontos por ordem p5 p3 p4 p6 p2 p0 p1 p8 p10 p9 p7
30
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p10 p9 p7
Geração de Polígonos Estrelados Quick Star Ligar os pontos por ordem p5 p3 p4 p6 p2 p0 p1 p8 p10 p9 p7
31
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p10 p9 p7
Geração de Polígonos Estrelados Quick Star Ligar os pontos por ordem p5 p3 p4 p6 p2 p0 p1 p8 p10 p9 p7
32
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p10 p9 p7
Geração de Polígonos Estrelados Quick Star Ligar os pontos por ordem p5 p3 p4 p6 p2 p0 p1 p8 p10 p9 p7
33
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p10 p9 p7
Geração de Polígonos Estrelados Quick Star Ligar os pontos por ordem p5 p3 p4 p6 p2 p0 p1 p8 p10 p9 p7
34
Quick Star p5 p3 p4 p2 p6 p0 p1 p8 p10 p9 p7
Geração de Polígonos Estrelados Quick Star Ligar os pontos por ordem p5 p3 p4 p6 p2 p0 p1 p8 p10 p9 p7
35
Quick Star O(nlogn) Geração de Polígonos Estrelados
Polígono Estrelado Final O(nlogn)
36
(não gera todos os polígonos simples possíveis)
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
Steady Growth s2 s3 s1 Geração de Polígonos Simples
Encontrar três pontos que formem um triângulo vazio s2 s3 s1
39
Steady Growth s4 s2 s3 s1 Geração de Polígonos Simples
Escolher um ponto si tal que não exista nenhum ponto de S\{s1,s2,s3} interior a CH(s1,s2,s3,s4) s4 s2 s3 s1
40
Steady Growth s4 s2 s3 s1 Geração de Polígonos Simples
Encontrar uma aresta do polígono já formado que seja completamente visível para si s4 s2 s3 s1
41
Steady Growth s4 s2 s3 s1 Geração de Polígonos Simples
Criar duas novas arestas e ir acrescentando os vários pontos, um a um, ao polígono já formado s4 s2 s3 s1
42
Steady Growth s5 s4 s2 s3 s1 Geração de Polígonos Simples
Continuar com este procedimento para todos os diferentes pontos s5 s4 s2 s3 s1
43
Steady Growth s5 s4 s6 s2 s3 s1 Geração de Polígonos Simples
Continuar com este procedimento para todos os diferentes pontos s5 s4 s6 s2 s3 s1
44
Steady Growth s5 s4 s6 s2 s7 s3 s1 Geração de Polígonos Simples
Continuar com este procedimento para todos os diferentes pontos s5 s4 s6 s2 s7 s3 s1
45
Steady Growth s8 s5 s4 s6 s2 s7 s3 s1 Geração de Polígonos Simples
Continuar com este procedimento para todos os diferentes pontos s8 s5 s4 s6 s2 s7 s3 s1
46
Steady Growth s8 s5 s9 s4 s6 s2 s7 s3 s1 Geração de Polígonos Simples
Continuar com este procedimento para todos os diferentes pontos s8 s5 s9 s4 s6 s2 s7 s3 s1
47
Steady Growth s8 s10 s5 s9 s4 s6 s2 s7 s3 s1
Geração de Polígonos Simples Steady Growth Continuar com este procedimento para todos os diferentes pontos s8 s10 s5 s9 s4 s6 s2 s7 s3 s1
48
Steady Growth s11 s8 s10 s5 s9 s4 s6 s2 s7 s3 s1
Geração de Polígonos Simples Steady Growth Continuar com este procedimento para todos os diferentes pontos s11 s8 s10 s5 s9 s4 s6 s2 s7 s3 s1
49
Steady Growth O(n2) Geração de Polígonos Simples
Polígono Simples Final O(n2)
50
Space Partitioning f1 i1 Geração de Polígonos Simples
Escolher dois pontos aleatórios f1 i1
51
Space Partitioning f1 i1 Geração de Polígonos Simples
Separar os pontos de S em dois conjuntos f1 i1
52
Space Partitioning f1 i1 Geração de Polígonos Simples
Separar os pontos de S em dois conjuntos f1 i1
53
Space Partitioning x1 f1 i1 Geração de Polígonos Simples
Escolher um ponto x1 do conjunto da esquerda x1 f1 i1
54
Space Partitioning x1 f1 i1 Geração de Polígonos Simples
Dividir os pontos deste conjunto através de uma recta que passa por x1 e intersecta a recta inicial x1 f1 i1
55
Space Partitioning x1 f1 i1 Geração de Polígonos Simples
Dividir os pontos deste conjunto através de uma recta que passa por x1 e intersecta a recta inicial x1 f1 i1
56
Space Partitioning x1 f1 x2 i1 Geração de Polígonos Simples
Continuar com este processo até existir um conjunto vazio x1 f1 x2 i1
57
Space Partitioning x1 f1 x2 i1 Geração de Polígonos Simples
A aresta é formada pelo início e fim do conjunto em questão x1 f1 x2 i1
58
Space Partitioning x3 x1 f1 x2 i1 Geração de Polígonos Simples
A aresta é formada pelo início e fim do conjunto em questão x3 x1 f1 x2 i1
59
Geração de Polígonos Simples
Space Partitioning x3 x1 f1 x2 i1
60
Geração de Polígonos Simples
Space Partitioning x3 x4 x1 f1 x2 i1
61
Geração de Polígonos Simples
Space Partitioning x3 x4 x1 f1 x2 x5 i1
62
Geração de Polígonos Simples
Space Partitioning x3 x4 x1 f1 x2 x5 i1
63
Space Partitioning x3 x4 x1 i2 x2 x5 f2 x6
Geração de Polígonos Simples Space Partitioning O início e o fim trocam para o conjunto da direita x3 x4 x1 i2 x2 x5 f2 x6
64
Space Partitioning x3 x4 x1 i2 x2 x5 x7 f2 x6
Geração de Polígonos Simples Space Partitioning x3 x4 x1 i2 x2 x5 x7 f2 x6
65
Space Partitioning x3 x4 x1 i2 x2 x5 x7 f2 x6
Geração de Polígonos Simples Space Partitioning x3 x4 x1 i2 x2 x5 x7 f2 x6
66
Space Partitioning x3 x4 x1 i2 x2 x5 x7 f2 x6
Geração de Polígonos Simples Space Partitioning x3 x4 x1 i2 x2 x5 x7 f2 x6
67
Space Partitioning x3 x4 x1 i2 x2 x5 x7 f2 x8 x6
Geração de Polígonos Simples Space Partitioning x3 x4 x1 i2 x2 x5 x7 f2 x8 x6
68
Space Partitioning x3 x4 x1 i2 x2 x5 x7 f2 x8 x6 x9
Geração de Polígonos Simples Space Partitioning x3 x4 x1 i2 x2 x5 x7 f2 x8 x6 x9
69
Space Partitioning x3 x4 x1 i2 x2 x5 x7 f2 x8 x6 x9
Geração de Polígonos Simples Space Partitioning x3 x4 x1 i2 x2 x5 x7 f2 x8 x6 x9
70
Space Partitioning O(nlogn) Geração de Polígonos Simples
Polígono Simples Final O(nlogn)
71
Permute & Reject Geração de Polígonos Simples
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
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
Geração de Polígonos Simples 2-Opt Moves Ligar os pontos de S aleatoriamente, por exemplo, pela ordem por que foram gerados s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
74
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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 s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
75
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
Geração de Polígonos Simples 2-Opt Moves Desfaz as intersecções criando as arestas s11s3 e s1s2 ou s1s3 e s2s11. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
76
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
Geração de Polígonos Simples 2-Opt Moves Desfaz as intersecções criando as arestas s11s3 e s1s2 ou s1s3 e s2s11. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
77
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
78
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
79
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
80
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
81
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
82
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
83
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
84
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
85
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
86
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
87
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
88
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
89
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
90
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
91
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
92
2-Opt Moves s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
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. s6 s9 s10 s5 s7 s4 s11 s2 s8 s3 s1
93
Geração de Polígonos Simples
2-Opt Moves Polígono Simples Final O(n3)
94
Incremental Construction & Backtracking
Geração de Polígonos Simples Incremental Construction & Backtracking Escolher 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
Partition Growth - O(t log t)
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
Partition Growth Geração de Polígonos Simples
Número mínimo de vértices do polígono é 10. Gerar um polígono com três vértices.
97
Partition Growth Geração de Polígonos Simples
Gerar uma recta que intersecte o polígono
98
Partition Growth Geração de Polígonos Simples
Determinar os pontos de intersecção entre a recta e o polígono.
99
Partition Growth Geração de Polígonos Simples
Dividir em dois as arestas do polígono que são intersectadas pela recta
100
Partition Growth Geração de Polígonos Simples
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
Partition Growth Geração de Polígonos Simples
O número de pontos é menor que 10. Gerar outra recta que intersecte o polígono.
102
Partition Growth Geração de Polígonos Simples
Determinar os pontos de intersecção entre a recta e o polígono.
103
Partition Growth Geração de Polígonos Simples
Dividir em dois as arestas do polígono que são intersectadas pela recta
104
Partition Growth Geração de Polígonos Simples
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
Partition Growth Geração de Polígonos Simples
Número de pontos é menor que 10. Gerar uma recta que intersecte o polígono.
106
Partition Growth Geração de Polígonos Simples
Determinar os pontos de intersecção entre a recta e o polígono.
107
Partition Growth Geração de Polígonos Simples
Dividir em dois as arestas do polígono que são intersectadas pela recta
108
Partition Growth Geração de Polígonos Simples
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
Partition Growth O(t log t) Geração de Polígonos Simples
Número de pontos é maior que 10. O(t log t)
110
Geração de Polígonos Estrelados
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.
111
Convex Bottom - O(nlogn)
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. Convex Bottom - O(nlogn) (não gera todos os polígonos simples possíveis) Two Peasants - O(nlogn) Radar Sweep - O(nlogn) (não gera todos os polígonos estrelados possíveis)
112
Geração de Polígonos Simples
Convex Bottom
113
Convex Bottom xmin xmax Geração de Polígonos Simples
Encontrar os pontos de menor e maior abcissa xmin xmax
114
Convex Bottom xmin xmax Geração de Polígonos Simples
Criar uma recta e dividir os pontos xmin xmax
115
Convex Bottom xmin xmax Geração de Polígonos Simples
Criar uma recta e dividir os pontos xmin xmax
116
Convex Bottom xmin xmax Geração de Polígonos Simples
Criar o invólucro convexo de um dos grupos de pontos xmin xmax
117
Convex Bottom xmin xmax Geração de Polígonos Simples
Ligar os restantes pontos através da sua abcissa xmin xmax
118
Convex Bottom O(nlogn) Geração de Polígonos Simples
Polígono Simples Final O(nlogn)
119
Geração de Polígonos Simples
Two Peasants
120
Two Peasants xmin xmax Geração de Polígonos Simples
Encontrar os pontos de menor e maior abcissa xmin xmax
121
Two Peasants xmin xmax Geração de Polígonos Simples
Criar uma recta e dividir os pontos xmin xmax
122
Two Peasants xmin xmax Geração de Polígonos Simples
Criar uma recta e dividir os pontos xmin xmax
123
Two Peasants xmin xmax Geração de Polígonos Simples
Ligar cada conjunto através da sua abcissa xmin xmax
124
Two Peasants xmin xmax Geração de Polígonos Simples
Ligar cada conjunto através da sua abcissa xmin xmax
125
Two Peasants xmin xmax Geração de Polígonos Simples
Ligar cada conjunto aos extremos xmin xmax
126
Two Peasants O(nlogn) Geração de Polígonos Simples
Polígono Simples Final O(nlogn)
127
Geração de Polígonos Estrelados
Radar Sweep
128
Radar Sweep xmin Geração de Polígonos Estrelados
Encontrar o ponto de menor abcissa xmin
129
Radar Sweep p0 Geração de Polígonos Estrelados
Ordenar os pontos em redor de p0 = xmin p0
130
Radar Sweep p0 p1 Geração de Polígonos Estrelados
Ordenar os pontos em redor de p0 = xmin p0 p1
131
Radar Sweep p0 p2 p1 Geração de Polígonos Estrelados
Ordenar os pontos em redor de p0 = xmin p0 p2 p1
132
Radar Sweep p0 p2 p3 p1 Geração de Polígonos Estrelados
Ordenar os pontos em redor de p0 = xmin p0 p2 p3 p1
133
Radar Sweep p0 p2 p3 p4 p1 Geração de Polígonos Estrelados
Ordenar os pontos em redor de p0 = xmin p0 p2 p3 p4 p1
134
Radar Sweep p0 p5 p2 p3 p4 p1 Geração de Polígonos Estrelados
Ordenar os pontos em redor de p0 = xmin p0 p5 p2 p3 p4 p1
135
Radar Sweep p0 p5 p6 p2 p3 p4 p1 Geração de Polígonos Estrelados
Ordenar os pontos em redor de p0 = xmin p0 p5 p6 p2 p3 p4 p1
136
Radar Sweep p7 p0 p5 p6 p2 p3 p4 p1 Geração de Polígonos Estrelados
Ordenar os pontos em redor de p0 = xmin p7 p0 p5 p6 p2 p3 p4 p1
137
Radar Sweep p8 p7 p0 p5 p6 p2 p3 p4 p1 Geração de Polígonos Estrelados
Ordenar os pontos em redor de p0 = xmin p8 p7 p0 p5 p6 p2 p3 p4 p1
138
Radar Sweep p8 p9 p7 p0 p5 p6 p2 p3 p4 p1
Geração de Polígonos Estrelados Radar Sweep Ordenar os pontos em redor de p0 = xmin p8 p9 p7 p0 p5 p6 p2 p3 p4 p1
139
Radar Sweep p10 p8 p9 p7 p0 p5 p6 p2 p3 p4 p1
Geração de Polígonos Estrelados Radar Sweep Ordenar os pontos em redor de p0 = xmin p10 p8 p9 p7 p0 p5 p6 p2 p3 p4 p1
140
Radar Sweep p10 p8 p9 p7 p0 p5 p6 p2 p3 p4 p1
Geração de Polígonos Estrelados Radar Sweep Ligar os pontos pela ordem que foram encontrados (ordem dada pelos índices) p10 p8 p9 p7 p0 p5 p6 p2 p3 p4 p1
141
Radar Sweep p10 p8 p9 p7 p0 p5 p6 p2 p3 p4 p1
Geração de Polígonos Estrelados Radar Sweep Ligar o primeiro ponto ao último p10 p8 p9 p7 p0 p5 p6 p2 p3 p4 p1
142
Radar Sweep O(nlogn) Geração de Polígonos Estrelados
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 todos os polígonos possíveis numa grelha) Inflate-Paste - O(n2)
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)
145
Inflate-Cut Geração de Polígonos Ortogonais
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 Geração de Polígonos Ortogonais
Escolhe uma célula interior aleatória
147
Inflate-Cut Geração de Polígonos Ortogonais
A célula escolhida vai “inchar” (inflate)
148
Inflate-Cut Geração de Polígonos Ortogonais
A célula escolhida vai “inchar” (inflate)
149
Inflate-Cut Geração de Polígonos Ortogonais
Procura as peças que podem ser cortadas (cut). Uma peça pode cortar-se se apenas contiver um vértice do polígono 4 3 1 2
150
Inflate-Cut Geração de Polígonos Ortogonais
Corta a peça escolhida e obtém outro polígono ortogonal
151
Inflate-Cut Geração de Polígonos Ortogonais
Corta a peça escolhida e obtém outro polígono ortogonal
152
Inflate-Cut Geração de Polígonos Ortogonais
Corta a peça escolhida e obtém outro polígono ortogonal
153
Inflate-Cut Geração de Polígonos Ortogonais
Corta a peça escolhida e obtém outro polígono ortogonal
154
Inflate-Cut Geração de Polígonos Ortogonais
Corta a peça escolhida e obtém outro polígono ortogonal
155
Inflate-Cut Geração de Polígonos Ortogonais
Corta a peça escolhida e obtém outro polígono ortogonal
156
Inflate-Cut Geração de Polígonos Ortogonais
Corta a peça escolhida e obtém outro polígono ortogonal
157
Inflate-Cut O(n2) Geração de Polígonos Ortogonais
Corta a peça escolhida e obtém outro polígono ortogonal O(n2)
158
Inflate-Paste Geração de Polígonos Ortogonais
O algoritmo começa por escolher um vértice convexo v do polígono v
159
Inflate-Paste Geração de Polígonos Ortogonais
Selecciona uma célula que se encontra em FSN(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. v
160
Inflate-Paste Geração de Polígonos Ortogonais
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
Inflate-Paste Geração de Polígonos Ortogonais
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
Inflate-Paste Geração de Polígonos Ortogonais
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
Inflate-Paste Geração de Polígonos Ortogonais
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
Inflate-Paste Geração de Polígonos Ortogonais
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
Inflate-Paste Geração de Polígonos Ortogonais
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
Inflate-Paste Geração de Polígonos Ortogonais
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
Inflate-Paste Geração de Polígonos Ortogonais
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
Inflate-Paste O(n2) Geração de Polígonos Ortogonais
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
Contagem (O(n) espaço e O(K) tempo)
Geração de Polígonos Monótonos Contagem (O(n) espaço e O(K) tempo) 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 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
Sai então que N(k) = |T(k)| + |B(k)| = T(k) + B(k).
Geração de Polígonos Monótonos Contagem (O(n) espaço e O(K) tempo) 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 s1 s2 s3 s4 s5 s6 s7 T(7) B(7) Sai então que N(k) = |T(k)| + |B(k)| = T(k) + B(k).
181
Contagem (O(n) espaço e O(K) tempo)
Geração de Polígonos Monótonos Contagem (O(n) espaço e O(K) tempo) 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”. s1 s2 s3 s4 s5 s6 s7 s8 VT(8) = {6} VB(8) = {3,5} 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.
182
Contagem (O(n) espaço e O(K) tempo)
Geração de Polígonos Monótonos Contagem (O(n) espaço e O(K) tempo) Daqui sai então que: 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.
183
Geração (O(n) espaço e tempo)
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ÇÕES
187
Avaliação prática de algoritmos relativos à manipulação de polígonos:
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
Applet
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.