Interseções de Segmentos de Linha João Comba. Sobreposição de Mapas Temáticos

Documentos relacionados
Diagrama de Voronoi João Comba

Interval Trees, Priority Search Trees, Segment Trees. João Comba. Pesquisas intervalares sobre segmentos de reta

Particionamento de Polígonos João Comba. Problema da Galeria de Arte. The Walters Art Museum, Baltimore, EUA

Geometria Computacional VII: Diagramas de Voronoi

Geometria Computacional

Arranjos e Dualidade. PS. Alguns slides baseadas nas notas de curso de Craig Gotsman e Darius Jazayeri. Ray Tracing x Supersampling

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Imagination is more important than knowledge A. Einstein. 4. Partição de Polígonos. Mestrado em Matemática e Aplicações

Teoria dos grafos. Caminho euleriano e Hamiltoniano. Prof. Jesuliana N. Ulysses

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Busca em Profundidade. Componentes Conexos. Grafos. Maria Adriana Vidigal de Lima. Fevereiro

Teoria dos Grafos Aula 8

Grafos: Busca. Algoritmos e Estruturas de Dados 2. Graça Nunes

GRAFOS Aula 08 Árvore Geradora Mínima: Algoritmos de Kruskal e Prim-Jarnik Max Pereira

Terrenos. Triangulações de Delaunay João Comba

Árvores AVL e Árvores B. Jeane Melo

Copiar para o ficheiro ArvoreBinaria.h e adaptar as funções associadas às operações sobre árvores binárias (3.1 a 3.12)

Matemática Discreta. Aula nº 22 Francisco Restivo

Arranjos. Claudio Esperança Paulo Roma LCG/UFRJ. All rights reserved.

Grafo planar: Definição

TGR BCC Representação Computacional de Grafos. Prof. Ricardo José Pfitscher

Professor: Anselmo Montenegro Conteúdo: - Problemas fundamentais. Instituto de Computação - UFF

Geometria Computacional: Polígonos

INF 1010 Estruturas de Dados Avançadas

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Ponto em Polígono. António Leslie Bajuelos Departamento de Matemática Universidade de Aveiro

5. Invólucros Convexos no Plano

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

Árvores. Estruturas de Dados. Prof. Vilson Heck Junior

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Árvore Vermelho-Preta. Estrutura de Dados II Jairo Francisco de Souza

Teoria dos Grafos Aula 6

Grafos - Representação

Prova 2 PMR3201 1o. semestre 2016 Prof. Thiago Martins

Introdução à Teoria dos Grafos. Isomorfismo

Teoria dos Grafos Aula 8

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Caminho mais curto. 1 - Caminho não pesado

Árvores Binária de Busca. Prof. César Melo DCC/ICE/UFAM

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Ciclos hamiltonianos e o problema do caixeiro viajante

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

ÁRVORE BINÁRIA DE BUSCA

Árvore Binária de Busca. Prof. César Melo

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO. 5 a Lista de Exercícios

Grafos: árvores geradoras mínimas. Graça Nunes

Projeto e Análise de Algoritmos

Grafos: componentes fortemente conexos, árvores geradoras mínimas

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

Introdução ao Processamento e Síntese de imagens - Preenchimento de Polígonos

Engenharia de Software

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Algoritmos e Estruturas de Dados II IEC013

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

CES-11. Algoritmos e Estruturas de Dados

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

PCS3111. Laboratório de Programação Orientada a Objetos para Engenharia Elétrica. Aula 11: Exercício Integrador (parte 2)

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Algoritmos Combinatórios: Backtracking com Bounding

Grafos Direcionados. > Grafos Direcionados Representações Computacionais 1/36

Planaridade UFES. Teoria dos Grafos (INF 5037)

EAD Árvore - representação usando listas ligadas

Árvores Binárias de Busca (ABB) 18/11

Exercícios: Árvores. Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de estrutura de dados em linguagem C

INF 1010 Estruturas de Dados Avançadas

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

Problema. Quantas cores são necessárias para pintar este mapa? Número. Cromático. Estruturas de Dados - Grafos. Problema. Problema

OBI2012 Caderno de soluções

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

Algoritmo de Dijkstra Estudo e Implementação

Aula 08. Estruturas de dados Árvore e Grafo

Estruturas de Dados Grafos

Universidade de São Paulo

Teoria dos Grafos Aula 3

AED2 - Aula 22 Busca em largura, cálculo de distâncias

06 Grafos: Caminhos Mínimos SCC0503 Algoritmos e Estruturas de Dados II

Busca em Regiões Ortogonais

Projeto e Análise de Algoritmos

Exemplos de utilização de primitivas (nível API) M.Próspero

5. Invólucros Convexos no Plano (cont )

2.1. Construção da Pista

Unidade VI. Técnicas de Teste de Software Teste Estrutural. Profa. Dra. Sandra Fabbri

Estrutura de Dados. Estrutura de Dados Recursividade. Exemplo: 5! = 5 x 4! 4! = 4 x 3! 3! = 3 X 2! 2! = 2 x 1! 1! = 1 x 0!

Programação Dinâmica. Prof. Anderson Almeida Ferreira. Adaptado do material elaborado por Andrea Iabrudi Tavares

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

PROJETO E ANÁLISE DE ALGORITMOS (INF 2926)

Algoritmos Combinatórios: Sudoku via Backtracking e o Problema da Cobertura Exata

Planaridade AULA. ... META Introduzir o problema da planaridade de grafos. OBJETIVOS Ao final da aula o aluno deverá ser capaz de:

2 Conceitos básicos de topologia

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Teoria dos Grafos Aula 14

ÁRVORE B. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Rasterização de primitivas 2D e Pipeline 2D. Soraia Raupp Musse

Árvore binária - definição

Indução Matemática. Profa. Sheila Morais de Almeida. junho DAINF-UTFPR-PG

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Programação Dinâmica. Prof. Anderson Almeida Ferreira

Transcrição:

Interseções de Segmentos de Linha João Comba Sobreposição de Mapas Temáticos

Mapas temáticos Segmentos curvos aproximados por vários segmentos de linha Problema de Sobreposição (Overlay): Dados dois conjuntos de segmentos de linha, calcular todas interseções entre o segmento de um conjunto e um segmento do outro conjunto O(n 2 )? Colocar todos segmentos em um mesmo conjunto (simplificar a descrição da solução) Casos Extremos

Casos Extremos Casos Extremos Algoritmo sensível a saida (OUTPUT sensitive)

Como evitar testar todos os pares? Segmentos próximos são candidatos mais fortes a interseção Y X Como evitar testar todos os pares? Segmentos próximos são candidatos mais fortes a interseção Y Problema: Como enumerar todos pares candidatos a interseção? X

Plane Sweep Ordenar os pontos na coordenada Y Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10 Ordenar os pontos na coordenada Y

Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10 Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10

Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10 Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10

Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10 Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10

Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10 Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10

Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10 Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10

Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10 Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10

Plane Sweep 1 2 6 3 4 5 11 9 12 8 7 10 Plane Sweep Linha de Sweep Status da linha de sweep Eventos: quando? pontos superior/inferior

Plane Sweep Linha de Sweep Status da linha de sweep Eventos: quando? pontos superior/inferior interseção? testar todos segmentos atualizar linha de sweep Complexidade? Ordernar segmentos na sweep line

Ordernar segmentos na sweep line L Ordernar segmentos na sweep line L x x

Solução é correta? Seja s i e s j dois segmentos não horizontais que se interceptam em um ponto p Assuma que não haja um terceiro segmento passando por p. LEMA: Existe um evento acima de p onde s i e s j se tornam adjacente e sua interseção é testada s i s j p Processando

Processando Interseções Trocar Ordem requer processar eventos em pontos de interseção Processando Interseções

Processando Interseções Novas interseções podem ser criadas pois segmentos que antes não eram adjacentes se tornam após o ponto de interseção Processando Interseções

Processando Interseções Novas Interseções Casos Especiais Três segmentos interceptando em um ponto: Reportar para cada ponto de interseção os segmentos passando por ele Dois segmentos parcialmente sobrepostos

Estruturas de Dados Fila de eventos (event queue) Q: Escolher evento com maior coordenada Y, coordenada X como desempate Estruturas de Dados s k s i s j s k s l s m s i s l s i s j s l s m s j s k

Exemplo s 1 s 7 s 5 s 4 s 3 s 8 s 3 s 2 s 1 convenção FindIntersections(S) Algoritmo FindIntersections(S): Entrada: Conjunto de segmentos de linha S no plano Saída: Conjunto de pontos de interseção, contendo para cada ponto o segmento que o contém 1. Inicializar uma fila de eventos Q, inserir os vértices dos segmentos em Q, associar o segmento ao vértice superior 2. Inicializar como vazia uma árvore de status T 3. WHILE Q não está vazia 4. DO Determinar o próximo evento p em Q e deletar de Q HandleEventPoint(p)

HandleEventPoint Algoritmo HandleEventPoint(p) Entrada: Conjunto de segmentos de linha S no plano Saída: Conjunto de pontos de interseção 1. Seja U(p) segmentos que p é vértice superior (para segmentos horizontais é o ponto mais a esquerda). Eles são armazenados com p na fila de eventos 2. Buscar em T o conjunto S(p) de todos segmentos que contém p (eles são adjacentes em T). Seja L(p) C S(p) o conjunto de segmentos nos quais p é o vértice inferior Seja C(p) C S(p) o conjunto de segmentos que contém p no seu interior HandleEventPoint 3. IF L(p) U U(p) U C(p) contém mais de um segmento THEN Reportar p junto com L(p), U(p) e C(p) 4. Deletar os segmentos em L(p) U C(p) de T 5. Inserir os segmentos em U(p) U C(p) em T 6. // Deletar e re-inserir C(p) reverte sua ordem 7. IF U(p) U C(p) = Ø 8. THEN Seja s l e s r os segmentos vizinhos a p em T 9. FindNewEvent(s l, s r, p) 10.ELSE Seja s o segmento mais a esquerda de U(p)UC(p) 11. Seja sl o vizinho esquerdo de s em T 12. FindNewEvent(s l, s, p) 13. Seja s o segmento mais a direita de U(p)UC(p) 14. Seja s r o vizinho direito de s em T 15. FindNewEvent(s, s r, p)

FindNewEvent(s l, s r, p) 1. IF s l e s r se interceptam abaixo da linha de sweep (ou sobre ela e a direita do ponto evento p), e a interseção ainda não está presente em Q 2. THEN Inserir o ponto de interseção como evento em Q Exemplo s 1 s 1 s 5 s 3 s 4 s 3 s 7 s 5 s 7 s 4 s 3 s 8 s 8 s 7 s 5 s 4 s 1 s 3 s 2 s 1

Exemplo s 1 s 1 s 5 s 3 s 4 s 3 s 7 s 5 s 7 s 4 s 3 s 8 s 8 s 7 s 5 s 4 s 1 s 2 s 3 s 2 s 1 s 3 s 1 s 7 s 2 s 1 s 8 s 7 s 3 Exemplo s 1 s 2 s 3 s 4 (s1,s2,s3,s4)

Exemplo s 1 s 2 s 3 s 4 (s1,s2,s3,s4)! (s1, s4) IF U(p) U C(p) = Ø THEN Seja sl e sr os segmentos vizinhos a p em T FindNewEvent(sl, sr, p) Exemplo s 1 s 2 s 3 s 4 (s1,s2,s3,s4)! (s1, s4) IF U(p) U C(p) = Ø THEN Seja sl e sr os segmentos vizinhos a p em T FindNewEvent(sl, sr, p)

Exemplo s 2 s 3 s 4 s1 s 5 s 6 s 7 s 8 (s1,s2,s3,s4,s5,s6) ELSE Seja s o segmento mais a esquerda de U(p)UC(p) Seja sl o vizinho esquerdo de s em T FindNewEvent(sl, s, p) Seja s o segmento mais a direita de U(p)UC(p) Seja sr o vizinho direito de s em T FindNewEvent(s, sr, p) Exemplo s 2 s 3 s 4 s1 s 5 s 6 s 7 s 8 (s1,s2,s3,s4,s5,s6)! (s1,s4,s7,s3,s8,s6) ELSE Seja s o segmento mais a esquerda de U(p)UC(p) Seja sl o vizinho esquerdo de s em T FindNewEvent(sl, s, p) Seja s o segmento mais a direita de U(p)UC(p) Seja sr o vizinho direito de s em T FindNewEvent(s, sr, p)

Exemplo s 2 s 3 s 4 s1 s 5 s 6 s 7 s 8 (s1,s2,s3,s4,s5,s6)! (s1,s4,s7,s3,s8,s6) ELSE Seja s o segmento mais a esquerda de U(p)UC(p) Seja sl o vizinho esquerdo de s em T FindNewEvent(sl, s, p) Seja s o segmento mais a direita de U(p)UC(p) Seja sr o vizinho direito de s em T FindNewEvent(s, sr, p) Complexidade LEMA. A complexidade do algoritmo FindIntersection para um conjunto n de segmentos de linha S no plano é : O((n+I)logn) onde I é o número de pontos de interseção em S

Prova O(nlogn) para construir uma árvore binária balanceada com os eventos (fila Q) Processando um evento: deletar o evento de Q O(log n) 1 ou 2 chamadas para FindNewEvent (podem inserir até 2 eventos em Q) O(log n) Número de inserções/deleções: linear em m(p), grau do vertice, = card(l(p)u U(p) U C(p)) m = # m(p) Complexidade = número de ins/del * O(logn)! O(mlogn) Provar que m = O(n+I)! O((n+I)logn)! O(nlogn + Ilogn) Prova Considere segmentos de linha subdivisões do plano Considere um evento p, m(p) é o grau do vértice m é limitado pela soma dos graus de todos os vértices Cada aresta aumenta em 1 o grau de 2 vértices m é limitado por 2n e Limitar n e em termos de n e I n v é 2n + I (por definição) Cada aresta limita duas faces, e precisam de pelo menos três para formar uma face: n f! 2n e /3 EULER: n v n e + n f " 2 (= se o grafo é conectado) 2! (2n+I) n e + 2n e /3 2! (2n+I) n e /3 n e! 6n+3I 6 m! 12n + 6I 12! O(n+I)

Sobreposição de Regiões Subdivisões Planares Mapas: representados por grafos planares V Geometria x Topologia E F

Lista de Arestas next(e) e twin(e) SEMI-ARESTAS origin(e) prev(e) IncidentFace(e) Lista de Arestas Duplamente Conectadas v1 e1,1 e1,2 f2 e3,2 e4,1 v2 e4,2 Vértice Coord Aresta v1 (0,4) e1,1 v2 (2,4) e4,2 v3 (2,2) e2,1 v4 (1,1) e2,2 Face Out In f1 NULL e1,1 f2 e4,1 NULL f1 e3,1 v4 e2,2 e2,1 v3 Aresta Orig Twin Incid Next Prev e1,1 v1 e1,2 f1 e4,2 e3,1 e1,2 v2 e1,1 f2 e3,2 e4,2 e2,1 v3 e2,2 f1 e2,2 e4,2 e2,2 v4 e2,1 f1 e3,1 e2,1 e3,1 v3 e3,2 f1 e1,1 e2,2 e3,2 v1 e3,1 f2 e4,1 e1,2 e4,1 v3 e4,2 f2 e1,2 e3,2 e4,2 v2 e4,1 f1 e2,1 e1,1

Sobreposição de Duas Subdivisões! Sobreposição S1 e S2 Copiar S1 e S2 em S S não é válida Tornar S válida Algoritmo de Sobreposição Como fazer? interseções semi-arestas faces

Abordagem Sweep 1. Aplicar o algoritmo de interseções de segmentos de linha ao conjunto de segmentos de S1 e S2 2. Estruturas de dados: D lista de arestas duplamente encadeadas Q fila de eventos T segmentos que cruzam a linha de sweep 3. Corrigir D Processando um evento

Processando um evento MapOverlay(S1,S2) Algoritmo MapOverlay(S1,S2): Entrada: Duas subdivisões planares S1, S2 Saída: Sobreposição de S1 e S2 armazenados em D 1. Copiar as listas duplamente encadeadas de S1, S2 em D 2. Calcular interseções entre arestas de S1 e S2 atualizar D quando arestas do evento vem de S1 e S2 armazenar a semi-aresta imediatamente a esquerda de um ponto evento no vértice de D 3. Determinar os ciclos de fronteira percorrendo D 4. Construir um grafo G cujos nodos representam os componentes conexos em D 5. FOR EACH componente conexo em G 6. DO Atualizar registros de faces 7. Nomear faces gerada com nomes das faces de S1 e S2

Operações booleanas