Geometria Computacional Fecho Convexo

Slides:



Advertisements
Apresentações semelhantes
Algoritmos de Caminho Mínimo em Grafos
Advertisements

Algoritmos em Grafos (Parte 2)
Geometria Computacional Fecho Convexo II
Computação Gráfica I Conteúdo: Professor: - Objetos gráficos planares
Fluxo em Redes Prof. Ricardo R. Santos.
Geometria Computacional Galeria de Arte
Katia S. Guimarães QUICKSORT Katia S. Guimarães
Solved Exercises 1. Finding the Peak. Let A= a1,…,an be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
Prof. Rajane G Weber C.A. João XXIII - UFJF
Métodos para representação de estruturas hierárquicas
Capítulo 3 - Aplicações das Derivadas
DERIVADAS E DIFERENCIAIS
PERCEPTRON (CONTINUAÇÃO)
Programação Linear Método Simplex
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
2002 LCG/UFRJ. All rights reserved. 1 Arranjos Claudio Esperança Paulo Roma.
Introdução à Computação Gráfica Recorte
Geometria Computacional Interseção de Segmentos
Interseção de Semiplanos
2002 LCG/UFRJ. All rights reserved. 1 Programação Linear Claudio Esperança Paulo Roma.
Geometria Computacional Fecho Convexo
Geometria Computacional Primitivas Geométricas
Decomposição Trapezoidal
2002 LCG/UFRJ. All rights reserved. 1 Localização no Plano Claudio Esperança Paulo Roma.
Claudio Esperança Paulo Roma
Decomposição Trapezoidal
DIM102 1 Curvas e Superfícies 35T56 – Sala 3F4 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 227.
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Busca Cega (Exaustiva)
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
CIRCUNFERÊNCIAS E ÂNGULOS
Algoritmos Genéticos - Capítulo 10 Representação Numérica
Geometria Computacional Prof. Walter Mascarenhas Segundo semestre de 2004 Aula 6.
T ÓPICOS DE I.A. Métodos de Busca Busca em Espaços de Estado Prof. Mário Dantas.
Algoritmos de varredura linear e busca de padrões
Informática Teórica Engenharia da Computação
Paradigma de Divisão e Conquista
Propriedades da Integral Definidas
Solução Básica Factível e Método Simplex Introdução ao Método Simplex Fase I e Fase II.
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Aula 08 Medidas de posição - Prof. Diovani Milhorim
Professor João Gilberto
Introdução e Busca Cega
Introdução aos Agentes Inteligentes Busca Cega (Exaustiva)
Introdução à Computação Gráfica Curvas
Estruturas de Dados e Ordenação
Computação Gráfica – Visibilidade
Ceça Moraes – Introdução à Programação SI1
Matemática 3º ano – Ensino Médio
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Transformada de Hough Processamento global para a detecção de linhas retas numa imagem Nenhum conhecimento é necessário a respeito da posição das linhas.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Prof. Edison Oliveira de Jesus
Computação Gráfica - Recorte
Método de Euler O método de Euler para resolver EDO com condições iniciais é o método numérico mais simples. Ele consiste em aproximar a solução y ( x.
Exercícios de Fluxo em Redes
Geometria Computacional Prof. Walter Mascarenhas Segundo semestre de 2004 Aula 5.
Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha.
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
GEOMETRIA ESPACIAL PRISMAS.
Métodos numéricos para resolver uma EDO
Programação Dinâmica Profa. Sandra de Amo Bacharelado em Ciência da Computação – UFU Disciplina de Análise de Algoritmos.
Prof. Edison Oliveira de Jesus
Introdução à Computação Gráfica Rasterização
GEOMETRIA ANALITICA VETORES.
Geometria Espacial.
Transcrição da apresentação:

Geometria Computacional Fecho Convexo

Problema

Motivação O fecho convexo de um conjunto de pontos é uma aproximação simples Necessariamente, não ocupa mais espaço do que o próprio conjunto de pontos No pior caso, polígono tem o mesmo número de vértices do próprio conjunto Computar o fecho convexo muitas vezes é um passo que precede outros algoritmos sobre conjuntos de pontos

Convexidade Um conjunto S é convexo se para quaisquer pontos p,q  S qualquer combinação convexa r  S Isto é, o segmento de reta pq  S O fecho convexo (convex hull) de um conjunto de pontos S é A interseção de todos os conjuntos convexos que contêm S O “menor” de todos os conjuntos convexos que contêm S O conjunto de todos os pontos que podem ser expressos como combinações convexas de pontos em S

Conjuntos Convexos Podem ter fronteiras retas ou curvas Podem ser fechados ou abertos Isto é podem ou não conter suas fronteiras (conceito de topologia) Podem ser limitados ou ilimitados Um semi-espaço plano ou um cone infinito são ilimitados O fecho convexo de um conjunto finito de pontos é limitado, fechado e cuja fronteira é linear por partes Em 2D, um polígono convexo Em 3D, um poliedro convexo

Problema do Fecho Convexo Dado um conjunto de pontos, computar seu fecho convexo Polígono é definido normalmente por uma circulação de vértices Vértices são pontos extremos Ângulos internos estritamente convexos (< ) Se 3 pontos na fronteira do polígono são colineares, o ponto do meio não é considerado Algoritmo “força bruta” Considere todos os pares de pontos p, q  S Se todos os demais pontos estão do mesmo lado do semi-espaço plano correspondente à reta que passa por p e q, então o segmento de reta pq pertence ao fecho convexo de S (Usar o operador orientação) Complexidade: O (n3)

Varredura de Graham (Graham Scan) Considerado o primeiro algoritmo de Geometria Computacional (1972) Algoritmo incremental (2D) Pontos são pré-ordenados de forma conveniente Cada ponto é adicionado ao fecho convexo e testado Precisamos de um ponto inicial p0 que garantidamente faz parte do fecho convexo Solução: Tomar o ponto com menor coordenada x (ou y) Na verdade, um ponto extremo em qualquer direção serve

Varredura de Graham (Graham Scan) Pontos restantes são ordenados de forma cíclica com respeito aos ângulos formados pelas retas p0pi Pontos colineares são removidos nesse processo

Varredura de Graham (Graham Scan) Pontos restantes são ordenados de forma cíclica com respeito aos ângulos formados pelas retas p0pi Pontos colineares são removidos nesse processo p2 p3 pn-1 p1 p0

Varredura de Graham (Graham Scan) Cada ponto considerado tem que estar à esquerda da aresta anteriormente computada do fecho convexo (teste de orientação) Ou o ponto anterior faz uma curva para esquerda p4 p2 p3 pn-1 p1 p0

Varredura de Graham (Graham Scan) O fecho convexo é mantido como uma pilha de pontos. Enquanto o ponto no topo da pilha não fizer uma curva para à esquerda, quando se considera o novo ponto, ele é desempilhado Em seguida estende-se a cadeia empilhando-se o novo ponto p5 p4 p2 p3 pn-1 p1 p0

Complexidade da Varredura de Graham Achar o ponto mínimo: O (n) Ordenar pontos restantes: O (n log n) Colocar e remover cada ponto Cada ponto entra no fecho convexo 1 vez Cada ponto pode sair do fecho convexo no máximo 1 vez Teste de orientação é O (1) Logo, testar todos os pontos é O (n) Conclusão: Varredura é O (n log n) Solução de pior caso ótima

Gift-wrap, Marcha de Jarvis Semelhante a Varredura de Graham Escolhe um ponto extremo ( garantido pertencer ao fecho). Testa cada um dos pontos e acha o que tá mais a a direita (será o próximo ponto do fecho)…e repete o processo.

Ordenando Via Fecho Convexo Crie um conjunto 2D de pontos (xi, xi2) sobre uma parábola e compute o seu fecho convexo Identifique o ponto inferior a do fecho em O(n), ou seja, o ponto de menor xi A ordem em que os pontos aparecem no fecho convexo no sentido anti-horário, a partir de a, é a ordem crescente dos xi Logo, o fecho convexo pode ser usado para ordenar um conjunto de valores onde, sabidamente, trata-se de um problema  (n log n)

Algoritmo “Dividir para Conquistar” Técnica tradicional de projeto de algoritmos Semelhante ao “MergeSort” Idéia: Dividir o problema em 2 subproblemas de tamanho aproximadamente igual Achar (recursivamente) a solução dos subproblemas Combinar as soluções dos subproblemas para obter a solução do problema

Algoritmo “Dividir para Conquistar” Caso básico S tem 3 pontos ou menos → resolver trivialmente Dividir Ordenar pontos por x e dividir S em dois subconjuntos, cada um com aproximadamente a metade dos pontos de S (usar a mediana em x): A tem os pontos com menores valores de x e B os com maiores valores Achar recursivamente HA = Hull (A) e HB = Hull (B)

Algoritmo “Dividir para Conquistar” Computar as tangentes inferior e superior e remover os pontos entre elas Tangente Superior B A Tangente Inferior

Algoritmo “Dividir para Conquistar” Para computar a tangente inferior: Seja a o ponto mais à direita (maior x) de A Seja b o ponto mais à esquerda (menor x) de B b B A a

Algoritmo “Dividir para Conquistar” Enquanto ab não for a tangente inferior Se orientação (a, a-1, b) = anti-horária, então a ← a-1 a -1 ou a +1 à direita de ab Se orientação (a, b, b+1) = horária, então b ← b+1 b - 1 ou b + 1 à direita de ab A B a-1 a b

Algoritmo “Dividir para Conquistar” Enquanto ab não for a tangente inferior Se orientação (a, a-1, b) = anti-horária, então a ← a-1 a -1 ou a +1 à direita de ab Se orientação (a, b, b+1) = horária, então b ← b+1 b - 1 ou b + 1 à direita de ab A B b+1 a b

Algoritmo “Dividir para Conquistar” Enquanto ab não for a tangente inferior Se orientação (a, a-1, b) = anti-horária, então a ← a-1 a -1 ou a +1 à direita de ab Se orientação (a, b, b+1) = horária, então b ← b+1 b - 1 ou b + 1 à direita de ab A B b a-1 a

Algoritmo “Dividir para Conquistar” Enquanto ab não for a tangente inferior Se orientação (a, a-1, b) = anti-horária, então a ← a-1 a -1 ou a +1 à direita de ab Se orientação (a, b, b+1) = horária, então b ← b+1 b - 1 ou b + 1 à direita de ab A B b a b+1

Algoritmo “Dividir para Conquistar” Enquanto ab não for a tangente inferior Se orientação (a, a-1, b) = anti-horária, então a ← a-1 a -1 ou a +1 à direita de ab Se orientação (a, b, b+1) = horária, então b ← b+1 b - 1 ou b + 1 à direita de ab A B b a-1 a

Algoritmo “Dividir para Conquistar” Enquanto ab não for a tangente inferior Se orientação (a, a-1, b) = anti-horária, então a ← a-1 a -1 ou a +1 à direita de ab Se orientação (a, b, b+1) = horária, então b ← b+1 b - 1 ou b + 1 à direita de ab A B b a b+1

Algoritmo “Dividir para Conquistar” Enquanto ab não for a tangente inferior Se orientação (a, a-1, b) = anti-horária, então a ← a-1 a -1 ou a +1 à direita de ab Se orientação (a, b, b+1) = horária, então b ← b+1 b - 1 ou b + 1 à direita de ab A B b a-1 a

Algoritmo “Dividir para Conquistar” Enquanto ab não for a tangente inferior Se orientação (a, a-1, b) = anti-horária, então a ← a-1 a -1 ou a +1 à direita de ab Se orientação (a, b, b+1) = horária, então b ← b+1 b - 1 ou b + 1 à direita de ab A B b a b+1

Algoritmo “Dividir para Conquistar” Enquanto ab não for a tangente inferior Se orientação (a, a-1, b) = anti-horária, então a ← a-1 a -1 ou a +1 à direita de ab Se orientação (a, b, b+1) = horária, então b ← b+1 b - 1 ou b + 1 à direita de ab B A b a

Algoritmo “Dividir para Conquistar” Observações Polígono representado por lista circular de vértices com circulação anti-horária “a ← a – 1” deve ser interpretado como “vértice seguinte a a no sentido horário” Cálculo da tangente superior é feito de forma análoga ao da tangente inferior A remoção dos pontos entre as tangentes é feita de forma trivial uma vez calculadas as tangentes

“Dividir para Conquistar” - Complexidade Algoritmo consiste de uma etapa de ordenação mais uma chamada a uma rotina recursiva Etapa de ordenação = O (n log n) Rotina recursiva: O trabalho feito localmente (sem contar as chamadas recursivas) consiste de Dividir S em 2 subconjuntos: O (n) Achar as 2 tangentes: O (n) Cada vértice é analisado no máximo 2 vezes Remover vértices entre as tangentes: O (n) Complexidade da rotina é dada então pela recorrência A solução desta recorrência (mesma que a do MergeSort) resulta em T(n)  O (n log n)

Antes do quickhull: incremental X

QuickHull Está para o QuickSort assim como o método “dividir para conquistar” está para o MergeSort Como o QuickSort, tem complexidade O (n log n) para entradas favoráveis. Porém, no pior caso, tem complexidade O (n2) Diferentemente do QuickSort, não se conhece um algoritmo randomizado que tenha complexidade esperada O (n log n) Na prática, entretanto, o desempenho é muito bom na maioria dos casos A idéia principal do QuickHull é descartar rapidamente pontos que obviamente estão no interior do fecho Por exemplo, se os pontos são distribuídos uniformemente num quadrado, prova-se que o número de vértices do fecho é O (log n)

QuickHull Inicialmente, o algoritmo acha 4 pontos extremos (máximo e mínimo em x e y) que garantidamente fazem parte do fecho convexo e descarta os pontos no interior do quadrilátero Descartar estes

QuickHull Vemos que os pontos não descartados podem ser divididos em 4 grupos, cada um associado a uma aresta Diz-se que esses pontos são “testemunhas” de que o segmento não é uma aresta do fecho convexo Se não há “testemunhas”, então o segmento é aresta do fecho Em geral, sempre temos os pontos não descartados em grupos associados a segmentos de reta

QuickHull Para cada segmento ab, o algoritmo prossegue elegendo um ponto c do grupo que se sabe ser um vértice do fecho convexo O método mais usado consiste em escolher o ponto mais distante da reta de suporte do segmento c b Descartar estes a

QuickHull Uma vez escolhido o ponto c, os demais pontos precisam ser classificados Se orient (a,c,p) ou orient (c,b,p) = colinear p sobre aresta → descartar Se orient (a,c,p) = orient (c,b,p) p dentro do triângulo → descartar Senão, Se orient (a,c,p) = anti-horário p “fora” da aresta ac Se orient (c,b,p) = anti-horário p “fora” da aresta cb O algoritmo é aplicado recursivamente aos grupos das novas arestas assim formadas

Complexidade do QuickHull Operações feitas localmente em cada chamada da rotina recursiva Determinar um ponto c no fecho convexo: O (n) Classificar os demais pontos: O (n) Tempo total do algoritmo é dado então pela recorrência n1 e n2 correspondem ao número de pontos “fora” em cada grupo

Complexidade do QuickHull Vemos portanto que a complexidade depende da distribuição de n1 e n2 Se a partição é bem balanceada max (n1 , n2) ≤ n para algum  < 1 Ou se uma fração fixa de pontos é descartada em cada passo n1 + n2 ≤ n para algum  < 1, Então a solução da recorrência é O (n log n) Caso contrário, temos um algoritmo que tem complexidade O (n2) O algoritmo é bastante rápido quando os pontos seguem uma distribuição aproximadamente uniforme Nesses casos, a convergência é rápida e o algoritmo bate a varredura de Graham