A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

GERAÇÃO ALEATÓRIA DE POLÍGONOS

Apresentações semelhantes


Apresentação em tema: "GERAÇÃO ALEATÓRIA DE POLÍGONOS"— Transcrição da apresentação:

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


Carregar ppt "GERAÇÃO ALEATÓRIA DE POLÍGONOS"

Apresentações semelhantes


Anúncios Google