Geometria Computacional Interseção de Segmentos

Slides:



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

Árvores 2010/1 Teoria dos Grafos (INF 5037/INF2781)
Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
Sistemas de Equações Lineares
AULA 02 PROGRAMAÇÃO LINEAR INTEIRA
Python: Recursão Claudio Esperança.
Geometria Computacional Fecho Convexo II
Celso C. Ribeiro Caroline T. Rocha
Geometria Computacional Galeria de Arte
Exercícios PAA- Grafos
UFES CC/EC/Mestrado Teoria dos Grafos Árvores. UFES CC/EC/Mestrado Teoria dos Grafos Árvores Grafo Acíclico: não possui ciclos.
PREENCHIMENTO DE POLÍGONOS
2 de Junho de 2005Conclusão1 Pedro Barahona DI/FCT/UNL Junho 2005.
1 Conclusão DI/FCT/UNL 1º Semestre 2004/ Ciclos de Simulação A técnica usada no exemplo da queda livre pode ser utilizada para trajectórias a duas.
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.
Árvore Binária - altura máxima A: Inserção de 1, 2, 3, 4, 5, 6 e 7 Pior caso: O(n)
Árvores.
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.
Arquivos Seqüenciais Inhaúma Neves Ferraz
2002 LCG/UFRJ. All rights reserved. 1 Arranjos Claudio Esperança Paulo Roma.
Introdução à Computação Gráfica Recorte
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
HeapSort Filas de Prioridade – Heap
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Classificação e Pesquisa de Dados
Árvores Binárias de Pesquisa (ABP)
Métodos de Classificação por Seleção: HeapSort
EQUAÇÕES POLINOMIAIS Prof. Marlon.
Geometria Computacional Prof. Walter Mascarenhas Segundo semestre de 2004 Aula 6.
Indexação de Arquivos Página de rosto.
Buscas em Grafos Prof. André Renato 1º Semestre/2012
Grafos Msc. Cintia Carvalho Oliveira Doutoranda em Computação – UFU
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
ME623A Planejamento e Pesquisa
Algoritmos de varredura linear e busca de padrões
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Algoritmos e Estruturas de Dados II
Árvores binárias de pesquisa com balanceamento
Exercícios PAA- Grafos
Capítulo 10 Funções polinomiais slide 1
Algorítmos e estrutura de dados III
Computação Gráfica Aula 11 Curvas Prof. Leo.
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Busca com informação e exploração
GEOMETRIA AXIOMÁTICA, SEGMENTOS DE RETA
Introdução e Busca Cega
Introdução à Computação Gráfica Curvas
Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um dado pode ser qualquer.
Ceça Moraes – Introdução à Programação SI1
1 A COMPUTAÇÃO MODERNA Valdemar W. Setzer Depto. de Ciência da Computação da USP
1 O Problema da Intersecção de Segmentos António Leslie Bajuelos Departamento de Matemática Universidade de Aveiro.
2.º Ciclo 6.º ano de escolaridade
Navegação e Controle de Robôs Móveis PLANEJAMENTO DE CAMINHOS.
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.
Prof. Edison Oliveira de Jesus
Geometria Computacional Fecho Convexo
Geometria Computacional Prof. Walter Mascarenhas Segundo semestre de 2004 Aula 5.
Geometria Computacional Prof. Walter Mascarenhas Segundo semestre de 2004 Aula 4.
Prof. Edison Oliveira de Jesus
Introdução à Computação Gráfica Rasterização
GEOMETRIA ANALITICA VETORES.
Transcrição da apresentação:

Geometria Computacional Interseção de Segmentos Claudio Esperança Paulo Roma Cavalcanti

O Problema de Interseção Consiste em, dados dois ou mais objetos geométricos Determinar se ele se interceptam (predicado) Determinar qual sua interseção (objeto ou objetos na interseção) Os dois problemas são relacionados mas não são idênticos Para determinar se 2 segmentos de reta se interceptam, basta fazer 4 testes de orientação Para determinar o ponto de interseção resolve-se um sistema de equações

Motivação Avaliação de bordo (CSG) Requer computar curvas de interseção entre primitivas Robótica e planejamento de movimento Detecção / prevenção de colisão Sistemas de Informações Geográficas (SIG/GIS) Operações de superposição de Mapas Computação Gráfica Traçado de raios

Interseção de Segmentos de Reta Dada uma coleção de n segmentos de reta, computar todos os pontos de interseção Quantos pontos de interseção podemos esperar? No mínimo, 0 No máximo = O(n2) Portanto, um algoritmo O(n2) seria de certa forma, ótimo Fácil de obter: testa-se todos os pares Em muitos casos, no entanto, espera-se poucas interseções O ideal é um algoritmo sensível à saída

Complexidade do Problema A complexidade esperada do problema é O (n log n + I ) onde I é o tamanho da saída Precisamos de tempo O (I ) para reportar todos os pontos de interseção Qual a razão para o termo n log n ? Problema associado Ω(n log n): Determinar se n números dados são todos distintos Problema pode ser mapeado no problema de interseção de segmentos de reta Construir n retas verticais, cada uma com x igual a um dos números Se o problema de interseção pudesse ser resolvido em tempo o (n log n) – isto é, estritamente menor – então o problema associado também poderia

Interseção de 2 segmentos Segmentos representados em forma paramétrica p(s) = (1 – s) a + s b para 0 ≤ s ≤ 1 q(t) = (1 – t) c + t d para 0 ≤ t ≤ 1 c a q(t) p(s) d b

Interseção de 2 segmentos Interseção ocorre sse existem s e t tais que p(s) = q(t) e 0 ≤ s,t ≤ 1 2 equações e 2 incógnitas: (1 – s) ax + s bx = (1 – t) cx + t dx (1 – s) ay + s by = (1 – t) cy + t dy Ao resolver o sistema, teremos que fazer uma divisão Se o divisor for 0, as retas de suporte são paralelas ou coincidentes

Algoritmo de Varredura Problema é resolvido percorrendo o plano com uma linha de varredura Usaremos uma linha horizontal varrendo o plano desde y = -∞ até y = +∞ Na verdade, não precisamos examinar todos os valores de y, apenas aqueles para os quais alguma coisa acontece (eventos) y x

Algoritmo de Varredura Eventos: Linha passa por ponto extremo de um segmento Linha passa por ponto de interseção (os primeiros podem ser ordenados, mas os segundos, não) Tratamento dos eventos Atualização das estruturas de dados Reportar pontos de interseção

Posição Geral Existem muitos casos degenerados que podem acontecer na prática e que iremos ignorar por enquanto: Segmentos horizontais Segmentos colineares Interseção de mais de dois segmentos num mesmo ponto Esses casos serão abordados na implementação mas atrapalham na concepção e análise do algoritmo Este tipo de raciocínio é muito comum em Geometria Computacional. Diz-se que “os dados de entrada estão em posição geral” (general position assumption)

Detecção de eventos de interseção Queremos detectar eventos de interseção antes que ocorram Estrutura de dados que descreve a linha de varredura contém os segmentos interceptados ordenados por x do ponto de interseção Sempre que há alteração nessa ordem, os segmentos afetados são testados para ver se se interceptam Ponto de interseção detectado y x

Detecção de eventos de interseção Não queremos testar 2 a 2 todos os segmentos que interceptam a linha de varredura No pior caso, isso levaria a complexidade O(n2) A idéia é testar apenas pares de segmentos consecutivos com respeito à linha de varredura. Por exemplo: Testes y AB C BD D BC A B CD x

Detecção de eventos de interseção Lema: Se 2 segmentos si e sj se interceptam num ponto p então si e sj foram adjacentes com relação à linha de varredura em alguma posição da mesma anterior a p Prova: Num ponto infinitesimalmente abaixo de p, si e sj eram adjacentes Estamos admitindo posição geral, i.e., 3 segmentos não podem se interceptar em p Considere o evento q acontecido imediatamente antes de p Necessariamente, logo após q, si e sj são adjacentes y p q x

Estruturas de Dados – Fila de Eventos Mantém os eventos (extremidades ou interseções) na ordem em que eles são encontrados pela linha de varredura: Sejam p e q dois eventos na fila Então p precede q sse p.y < q.y ou p.y = q.y e p.x < q.x Pode-se pensar numa linha de varredura ligeiramente inclinada Cada evento contém Posição (x, y) Tipo (extremidade superior, inferior ou interseção) Segmentos que participam no evento

Estruturas de Dados – Fila de Eventos Operações Retirar o evento seguinte Inserir um evento Pode-se usar um heap , mas como eventos duplicados podem ocorrer, é melhor usar uma estrutura que suporte busca em tempo logarítmico, como uma árvore binária balanceada Outra opção é usar um heap mas ao retirar o evento seguinte, testar se o próximo é uma duplicata. Caso positivo, este é descartado y x

Estr. Dados – Estado da Linha de Varredura Indica os segmentos correntemente interceptando a linha de varredura ordenados por coordenada x de interseção Operações Inserir um segmento Remover um segmento Consultar os segmentos adjacentes a um dado segmento Usa-se uma estrutura que permita realizar essas operações em O (log n). Ex.: Uma árvore binária de busca balanceada Uma skip-list

Algoritmo Inserir todos os eventos correspondentes a extremidades de segmentos na fila de eventos Repetir enquanto fila não vazia: Retirar próximo evento da fila. Temos os casos Extremidade Inferior de um segmento s Inserir s na linha de varredura Computar interseções de s com os segmentos adjacentes Extremidade Superior de um segmento s Testar a interseção dos 2 segmentos adjacentes Retirar s da linha de varredura Ponto de interseção entre segmentos si e sj Trocar si e sj de posição na linha de varredura Testar a interseção de si e sj com seus novos vizinhos

Complexidade Cada segmento é colocado na fila (2 vezes): O (n log n) A cada momento, a fila pode ter no máximo 2n + I eventos e portanto inserir ou remover um evento tem complexidade O (log (2n + I )) = O (log (2n + n2)) = O (log n) A linha de varredura tem no máximo n segmentos e portanto inserir ou remover um evento tem complexidade O (log n) O processamento de um evento pode requerer até 2 testes de interseção, logo, se faz O (2n + I) testes Portanto, o processamento todos os eventos tem complexidade O ((2n + I ) (1 + log n)) = O (n log n + I log n)