geraÇÃo aleatÓria de polÍgonos geraÇÃo e partiÇÃo de polÍgonos ana gonçalves inês matos...

Post on 22-Apr-2015

112 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

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

top related