Você está na página 1de 115

Universidade Federal de Uberlndia

Uma Proposta para a Triangulao de Delaunay 2D e Localizao Planar de Pontos em OCaml

Andr Luiz Moura

Uberlndia 2006 Tese de Doutorado Universidade Federal de Uberlndia Faculdade de Engenharia Eltrica Programa de Ps-Graduao em Engenharia Eltrica

ii

ANDR LUIZ MOURA

UMA PROPOSTA PARA A TRIANGULAO DE DELAUNAY 2D E LOCALIZAO PLANAR DE PONTOS EM OCAML

Tese apresentada ao programa de PsGraduao em Engenharia Eltrica da Universidade Federal de Uberlndia, como parte dos requisitos para obteno do ttulo de DOUTOR EM CINCIAS. rea de Concentrao: Eletricidade Rural e Fontes Alternativas de Energia Orientador: Prof. Jos Roberto Camacho (PhD)

Uberlndia MG 2006

FICHA CATALOGRFICA
Elaborada pelo Sistema de Bibliotecas da UFU / Setor de Catalogao e Classificao

M929p

Moura, Andr Luiz, 1967Uma Proposta para a Triangulao de Delaunay 2D e Localizao Planar de Pontos em OCaml / Andr Luiz Moura. Uberlndia, 2006. 114f. : il. Orientador: Jos Roberto Camacho. Tese (doutorado) Universidade Federal de Uberlndia, Programa de Ps-Graduao em Engenharia Eltrica. Inclui referncia bibliogrfica. 1. Engenharia eltrica - Matemtica - Teses. I. Camacho, Jos Roberto. II. Universidade Federal de Uberlndia. Programa de Ps-Graduao em Engenharia Eltrica. III. Ttulo. CDU: 62:51

iii

ANDR LUIZ MOURA

UMA PROPOSTA PARA A TRIANGULAO DE DELAUNAY 2D E LOCALIZAO PLANAR DE PONTOS EM OCAML

Tese apresentada ao programa de PsGraduao em Engenharia Eltrica da Universidade Federal de Uberlndia, como parte dos requisitos necessrios para obteno do ttulo de Doutor em Cincias. Tese APROVADA pelo Programa de Ps-graduao em Engenharia Eltrica da Universidade Federal de Uberlndia. rea de Concentrao: Eletricidade Rural e Fontes Alternativas de Energia

Banca Examinadora:

Jos Roberto Camacho, PhD (UFU) Orientador Antnio Eduardo Costa Pereira, PhD (UFU) Edgard Afonso Lamounier Jr., PhD (UFU) Mrio Mourelle Prez, PhD (UFU) Renato Cardoso Mesquita, Dr. (UFMG) Sebastio Camargo Guimares Jr., Dr. (UFU) Severino Luiz Guimares Dutra, Dr. (INPE) Prof. Darizon Alves de Andrade Coordenador do Curso de Ps-Graduao em Engenharia Eltrica

Uberlndia, 30 de Junho de 2006

iv

A Deus, memria de minha me, Adlia, ao meu filho, Arthur, e a minha esposa, Averlbia.

Agradecimentos
Ao altssimo Deus, por permitir que tudo acontecesse... minha me, Adlia Vieira da Costa (in memorian), por seu amor e dedicao... Universidade Federal de Uberlndia e Faculdade de Engenharia Eltrica pela oportunidade de realizar este Curso. Ao Professor Dr. Jos Roberto Camacho, meu orientador, entusiasta e grande incentivador, pela confiana, amizade e por todo o trabalho de orientao e reviso da tese. Ao Professor Dr. Antnio Eduardo Costa Pereira, meu primeiro contato na UFU, por toda ateno dispensada, considerao e sugestes. A minha esposa, Averlbia Gonalves Cordeiro Moura, por toda compreenso, incentivo e dedicao no preenchimento de lacunas que surgiram. Ao meu sogro, Valdave Gonalves Guimares, e a minha sogra, Gerantina Cordeiro Guimares, por todo o apoio provido a minha famlia durante minhas ausncias em casa. Aos colegas do Curso de Doutorado, Joo Manoel da Silva, Arquimedes Lopes da Silva e Lindolfo Marra de Castro Neto, pela amizade e companheirismo. Joana (anterior secretria da Ps-Graduao) e Marli (atual secretria da Ps-Graduao), pelo excelente desempenho funcional. Aos meus superiores no Tribunal Regional do Trabalho da 18 Regio, Humberto Magalhes Ayres e Paulo Gois Cordeiro dos Santos, respectivamente, Diretor da Secretaria de Tecnologia da Informao e Diretor do Servio de Gesto de Sistemas e Internet, pela deferncia em autorizar meus afastamentos ao trabalho para viagens a Uberlndia.

vi

Resumo

Nesta tese, apresentado um algoritmo dinmico de localizao planar de pontos. O algoritmo foi elaborado sobre dois fundamentos: - o mtodo das Slabs para particionar a subdiviso planar, representada por um grafo, e permitir a rpida identificao da regio em que se encontra o ponto que est sendo consultado; - a Multirvore-B Intervalar, uma estrutura de dados derivada rvore-B, aparelhada com mecanismo de pesquisa intervalar e disposta em camadas. O algoritmo dinmico porque altera dinamicamente a estrutura de pesquisa, medida que surgem eventos de insero ou remoo de segmentos na subdiviso planar que est sendo construda. O algoritmo foi implementado na linguagem OCaml, mas poderia ter sido implementado em qualquer outra linguagem de programao. Para aumentar a eficincia do algoritmo, algumas melhorias podem ser introduzidas, como por exemplo, a substituio do ncleo da Multirvore-B Intervalar por outros tipos de rvores balanceadas. Adicionalmente, foram discutidos alguns aspectos do processso de construo de malhas de elementos finitos, em que se insere, sobretudo, o problema da localizao planar de pontos.

Palavras-chaves: localizao planar de pontos dinmica, rvore balanceada, multirvore-B intervalar, triangulao de Delaunay incremental, malha bidimensional, OCaml

vii

Abstract

In this thesis, it is presented a planar point location algorithm. The algorithm was developed on top of two elements: - the method of slabs to divide the planar subdivision, is represented by a graph, allowing the fast identification of the region where the point being recalled is; the Interval Multi-B-tree, a data structure derived from the B-tree, prepared with an interval search structure and disposed in layers. The algorithm is essentially dynamic since the search structure keeps changing dynamically during the process, while the planar subdivision is being built; new events of segment insertion or removal keep appearing. The algorithm was implemented in OCaml, but could be carried out in any other programming language. To increase the algorithm efficiency, some improvements can be introduced, as an example, the substitution of the Interval Multi-B-tree core by other types of balanced trees. Moreover, it was discussed some aspects of the assembling process of the finite element meshing, where it is inserted, mainly, the planar point location problem.

Key-words: dynamic planar point location, balanced tree, interval multi-B-tree, incremental Delaunay triangulation, two dimensional meshing, OCaml

viii

UMA PROPOSTA PARA A TRIANGULAO DE DELAUNAY 2D E LOCALIZAO PLANAR DE PONTOS EM OCAML

Sumrio
LISTA DE FIGURAS LISTA DE TABELAS LISTA DE FRMULAS LISTA DE SMBOLOS TERMINOLOGIA BSICA 1. INTRODUO 2. ASPECTOS CRTICOS DA GERAO DA MALHA 2.1. Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Tipos de Domnios Geomtricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. Tipos de Malhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4. Propriedades Desejveis de uma Malha e de Geradores de Malhas . . . . . . . . . . . 2.5. Triangulao de Delaunay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6. Insero de Pontos de Steiner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7. Localizao Planar de Pontos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.8. Refinamento da Malha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. IMPLEMENTAO DE TRIANGULAO DE DELAUNAY POR DIVISO E CONQUISTA EM OCAML 3.1. Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. O Algoritmo de Diviso-e-Conquista modificado por Dwyer . . . . . . . . . . . . . . . 3.3. Melhoramentos efetuados no Algoritmo de Guibas-Stolfi . . . . . . . . . . . . . . . . . . 3.4. A Linguagem Objective Caml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5. Detalhes da Implementao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6. Resultados dos Experimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.1. Amostra da Robustez Numrica de OCaml . . . . . . . . . . . . . . . . . . . . . . . . . 3.7. Avaliao da Possibilidade de Paralelizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. GERADOR DE MALHAS ESCRITO EM OCAML 4.1. Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Caractersticas do Gerador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. Estrutura de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4. Notas sobre o Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5. Detalhes da Implementao em OCaml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6. Resultados da Triangulao de Domnios Geomtricos . . . . . . . . . . . . . . . . . . . . 5. LOCALIZAO PLANAR DE PONTOS USANDO MULTIRVORE-B INTERVALAR 5.1. Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 rvores Balanceadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x xiii xiv xv xvi 18 35 35 35 36 37 41 52 53 62

65 65 65 66 66 67 71 72 73 78 78 79 81 82 83 85

88 88 89

ix

5.2.1. A rvore-B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.2.2. A rvore-B Intervalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 5.2.3. A Multirvore-B Intervalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 5.3. Localizao Planar com Multirvore-B Intervalar . . . . . . . . . . . . . . . . . . . . . . . . 96 5.3.1 Construo Incremental da Estrutura de Pesquisa baseada em Eventos . . . . 96 5.3.2. Pr-processamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 5.3.3. Consulta de Pontos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 5.4. Experimentos Computacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 6. CONCLUSES 107 6.1. Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 REFERNCIAS BIBLIOGRFICAS 110

Lista de Figuras
1.1 1.2 1.3 1.4 1.5 Determinao se um ponto P est dentro de um tringulo ABC. . . . . . . . . . . . . Se o ponto P estiver dentro do tringulo ABC, o somatrio da rea dos trs novos tringulos ser igual rea de ABC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Se o ponto P estiver fora do tringulo ABC, o somatrio da rea dos trs novos tringulo ser maior que a rea de ABC. . . . . . . . . . . . . . . . . . . . . . . . . . Um PSLG particionado em slabs horizontais. . . . . . . . . . . . . . . . . . . . . . . . . . . Um PSLG decomposto em um conjunto de cadeias montonas (O procedimento de regularizao adicionou novas arestas (v2, v3), (v5, v6) e (v7, v8)) ao PSLG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Um polgono com faces irregulares. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Polgono triangulado para construo da estrutura de dados de Kirkpatrick.. . . Triangulao envolta por um grande tringulo e conectada aos seus vrtices.. . Triangulao com conjunto independente de vrtices com grau 8. . . . . . . . . Triangulao sem o conjunto independe de vrtices com grau 8. . . . . . . . . . Triangulao refeita. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estrutura de pesquisa gerada pelo algoritmo de Kirkpatrick. . . . . . . . . . . . . . . Um ponto de consulta sobre uma face F da subdiviso original. . . . . . . . . . . . . O caminho percorrido no DAG para localizar a regio que contm o ponto de consulta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O efeito da insero do ponto p no do tringulo T1 sobre a estrutura de dados D. Somente so mostradas as partes que sofreram alteraes. . . . . . . . . . . . . . Pior caso da localizao de pontos no DAG referente histria de uma triangulao de Delaunay incremental. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos de entradas bidimensionais: (a) polgono simples, (b) polgono com buracos, (c) domnio mltiplo e (d) domnio curvo. . . . . . . . . . . . . . . . . . . . . . Tipos de Malhas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Um tringulo de formato inadequado para o mtodo dos elementos finitos. . . . Passos da triangulao baseada em circle packing. . . . . . . . . . . . . . . . . . . . . (a) Uma quadtree. (b) Uma triangulao de um conjunto de pontos baseada em quadtree em que nenhum ngulo menor que 20. . . . . . . . . . . . . . . . . . . . A superfcie de uma malha tetradrica derivada de uma octree. . . . . . . . . . . . . Parte da triangulao de uma regio com trs buracos. . . . . . . . . . . . . . . . . . . . Triangulao de um polgono. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A triangulao de Delaunay sobre uma nuvem de pontos. . . . . . . . . . . . . . . . . A triangulao de Delaunay sobre um conjunto de 400 pontos aleatrios. . . . . Cada tringulo em uma triangulao de Delaunay tem um crculo-circundante vazio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O teste InCircle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uso do predicado InCircle para decidir qual das duas arestas (AC ou BD) aresta de Delaunay. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Triangulaes de Delaunay de C1 e C2, separadas por uma linha vertical imaginria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Triangulao de Delaunay de C1 C2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Amostra das deficincias da triangulao de Delaunay. . . . . . . . . . . . . . . . . . . Amostra da correo provida pela insero de pontos de Steiner. . . . . . . . . . . . 19 19 19 21

1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17

22 23 23 24 24 25 25 26 27 27 29 30 36 37 38 39 40 40 41 42 42 43 44 44 46 48 48 49 49

xi

2.18 (a) Um PLSG. (b) Uma triangulao de Delaunay do PSLG. (c) Uma triangulao de Delaunay com restries do PSLG. . . . . . . . . . . . . . . . . . . . . . 2.19 Supertringulo contendo pontos a serem triangulados. . . . . . . . . . . . . . . . . . . . 2.20 Os dois casos em que se adiciona um ponto pr. . . . . . . . . . . . . . . . . . . . . . . . . . 2.21 Triangulaes: (a) sem pontos de Steiner e (b) com pontos de Steiner. . . . . . . 2.22 Algoritmo de insero de pontos de Steiner. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.23 Subdiviso em slabs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.24 Amostra do pior caso da diviso em slabs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.25 Um mapa trapezoidal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.26 Atualizao (incremental) de mapa trapezoidal. . . . . . . . . . . . . . . . . . . . . . . . . 2.27 Um mapa trapezoidal de dois segmentos e a estrutura de pesquisa correspondente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.28 Um algoritmo incremental aleatrio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.29 Um algoritmo de pesquisa em mapa trapezoidal. . . . . . . . . . . . . . . . . . . . . . . . 2.30 Resultado da transformao shear. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.31 Movendo um vrtice para o centro de massa de seus vizinhos. . . . . . . . . . . . . . 2.32 Refinamento de uma regio da malha com tringulo de qualidade insatisfatria. O vrtice v inserido, o tringulo t eliminado, mas a propriedade de Delaunay mantida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Exemplo de distribuio uniforme de pontos no quadrado unitrio. . . . . . . . . . 3.2 Funo de multiplicao em OCaml. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Estrutura de dados da triangulao em C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4 Estrutura de dados da triangulao em OCaml. . . . . . . . . . . . . . . . . . . . . . . . . . 3.5 Trecho de cdigo da funo delete_edge em C. . . . . . . . . . . . . . . . . . . . . . . . . 3.6 Trecho de cdigo da funo delete_edge em OCaml baseado em proposta de Weis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7 Estrutura de dados (simplificada) da triangulao em OCaml. . . . . . . . . . . . . . 3.8 Trecho de cdigo (simplificado) da funo delete_edge em OCaml. . . . . . . . . 3.9 Resultados visuais de triangulaes de PSLG. . . . . . . . . . . . . . . . . . . . . . . . . . 3.10 Uma estratgia tpica de paralelizao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11 Triangulao de Delaunay seqencial de um conjunto de pontos. . . . . . . . . . . 3.12 Triangulao de Delaunay de um conjunto de pontos em quatro processadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.13 Resultados parciais da Triangulao de Delaunay nos quatro processadores. . . 4.1 Sntese do processo de gerao da malha. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Descrio do formato dos arquivos .node, .poly e .ele. . . . . . . . . . . . . . . . . . . . 4.3 Exemplos de contedo dos arquivos .node, .poly e .ele. . . . . . . . . . . . . . . . . . . 4.4 Estrutura de dados da aresta e do tringulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5 PSLG de uma guitarra eltrica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 Triangulao de Delaunay dos vrtices do PSLG. Alguns segmentos originais e faces esto ausentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7 Triangulao de Delaunay em conformidade com os segmentos do PSLG. . . . 4.8 Triangulao com tringulos removidos de concavidades e buracos. . . . . . . . . 4.9 Malha final (gerada por OCamlMesh) composta de 484 tringulos com ngulo mnimo no inferior a 30. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10 Cdigos da funo FindNeighbors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11 Implementao da estrutura de dados do gerador em linguagem C. . . . . . . . . . 4.12 Implementao da estrutura de dados do gerador em linguagem OCaml. . . . . . 4.13 Algumas malhas uniformes construdas pelo gerador OCamlMesh. . . . . . . . . . 4.14 Algumas malhas gradientes construdas pelo gerador OCamlMesh. . . . . . . . . .

50 51 51 52 53 54 55 56 57 59 59 60 61 63

64 66 67 68 69 70 70 70 71 72 74 76 77 77 80 80 81 81 82 82 82 83 83 84 84 85 86 87

xii

5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9. 5.10 5.11.

5.12 5.13 5.14 5.15 5.16 5.17

rvore binria totalmente degenerada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rvore binria balanceada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uma rvore-B de ordem 4 com todas as folhas no nvel 2. . . . . . . . . . . . . . . . . Modificaes no cdigo da rvore-B para obteno do limite inferior. . . . . . . Modificaes no cdigo da rvore-B para obteno do limite superior. . . . . . . Arquitetura global de uma Multirvore-B. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estrutura de dados da Multirvore-B em OCaml. . . . . . . . . . . . . . . . . . . . . . . . Subdiviso de um PSLG em slabs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algoritmo global do processo de construo da estrutura de pesquisa. . . . . . . . Mapeamentos possveis de segmentos no espao binrio. . . . . . . . . . . . . . . . . . Eventos significativos entre segmento novo (linha tracejada) e segmento vizinho (linha contnua), retratando as possveis formas de interseo entre eles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Relao espacial entre o novo segmento e os segmentos vizinhos. . . . . . . . . . . Orientaes dos segmentos de alguns tringulos. . . . . . . . . . . . . . . . . . . . . . . . Algoritmo Prepare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algoritmo Preprocess. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algoritmo Query. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos de entradas para os experimentos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

90 90 91 93 94 95 95 97 97 98

99 100 101 101 102 103 104

xiii

Lista de Tabelas
2.1 2.2 2.3 3.1 3.2 Trs critrios para elementos lineares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Complexidade de algoritmos de triangulao. . . . . . . . . . . . . . . . . . . . . . . . . . . Eficincias tericas dos algoritmos de localizao de pontos. . . . . . . . . . . . . . . Ponteiros explcitos em C traduzidos para OCaml. . . . . . . . . . . . . . . . . . . . . . . Resultados da triangulao por diviso-e-conquista utilizando um PC com processador Pentium III de 1.13 GHz, 128 Mb de memria RAM e 256 Kb de memria Cache, sob o sistema operacional Windows 98. . . . . . . . . . . . . . . . . . Resultados de operaes matemticas envolvendo nmeros na representao ponto-flutuante. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resultados de Testes de Localizao de Pontos na Malha do Crculo. . . . . . . . Resultados de Testes de Localizao de Pontos na Malha da Chave. . . . . . . . . Resultados de Testes de Localizao de Pontos na Malha da Letra A . . . . . . Resultados de Testes de Localizao de Pontos na Malha da Guitarra eltrica. Resultados de Testes de Localizao de Pontos na Malha do Lago Superior. . Distribuio de eventos identificados na fase de pr-processamento. . . . . . . . . 38 52 62 69

72 73 104 104 105 105 105 106

3.3 5.1 5.2 5.3 5.4 5.5 5.6

xiv

Lista de Frmulas
2.1 A transformao shear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

xv

Lista de Smbolos
ANSI BST CSG DAG IDE INRIA LCF MEF ML American National Standards Institute Binary Search Tree Constructive Solid Geometry Directed Acyclic Graph Integrated Development Environment Institut National de Recherche en Informatique et Automatique Logic of Computable Functions Mtodo dos Elementos Finitos Meta-Language

OCaml Objective Categorical Abstract Machine Language PLS PSLG RAM SGBD Piecewise Linear System Planar Straight Line Graph Random Access Memory Sistema de Gerenciamento de Banco de Dados

xvi

Terminologia Bsica
Aqui so explicados vrios termos bsicos que so usados no texto desta tese. Algoritmo uma seqncia finita e no ambgua de instrues que so necessrias para solucionar um problema. Algoritmos podem ser implementados por programas de computador, mas no representam necessariamente um programa de computador, e sim os passos necessrios para realizar uma tarefa.

Complexidade assinttica de um algoritmo determina a velocidade do crescimento de elementos de tempo consumidos por um algoritmo em relao ao nmero N de elementos de entrada, onde N maior que uma constante N0. A funo fmax(N), que atribui um nmero mximo de elementos de tempo para cada nmero N (> 0) de elementos de entrada, chamada de a complexidade de um algoritmo no pior caso. De forma anloga, a funo fmin(N), que atribui um nmero mnimo de elementos de tempo para cada nmero N, chamada de a complexidade de um algoritmo no melhor caso; por outro lado, a funo favg(N) chamada de a complexidade de um algoritmo no caso mdio. Normalmente, empregam-se letras gregas para denotar as funes de avaliao da complexidade assinttica de algoritmos. O(N), tambm conhecida por Big-Oh, usada para avaliar o pior caso; (N) usada para avaliar o melhor caso e (N) usada para avaliar caso mdio. Na avaliao de um algoritmo, geralmente, a complexidade assinttica para o pior caso empregada.

OCaml, Objective Caml, tambm conhecido como O'Caml uma linguagem de programao funcional da famlia ML, desenvolvida por INRIA em 1996. No uma linguagem puramente funcional, permitindo a existncia de valores mutveis bem como de efeitos colaterais, tipicamente existentes apenas em linguagens imperativas. Esta caracterstica distingue-a de outras linguagens puramente funcionais, como por exemplo Haskell.

Geometria Computacional, em cincia da computao, o estudo de algoritmos para resolver problemas relacionados geometria. O objetivo da geometria computacional desenvolver algoritmos e estruturas de dados eficientes que so aplicados na soluo de problemas em termos de objetos geomtricos elementares como pontos, retas, segmentos de reta, polgonos, poliedros, superfcies, etc. Exemplos de problemas que se incluem no domnio de estudo da disciplina so: par de pontos mais prximo, fecho convexo, diagrama de

xvii

Voronoi, triangulao de Delaunay, entre vrios outros. Na geometria computacional as figuras e construes geomtricas correspondem a estruturas de dados e algoritmos. Em geral, o interesse solucionar um problema utilizando o menor numero possvel de operaes elementares de modo a trazer eficincia no clculo da soluo. A geometria computacional constitui ferramenta fundamental em diversas reas da computao que necessitam de uma abordagem geomtrica, tais como computao grfica, robtica, sistemas de informao geogrfica (SIGs), viso computacional, otimizao combinatria, processamento de imagens, teoria dos grafos, desenho de circuitos integrados, desenho e engenharia (CAD/CAM), entre outras.

Triangulao de Delaunay, em matemtica e geometria computacional, pode ser definida, para um conjunto de pontos P no plano, como a triangulao DT(P) de P tal que nenhum ponto em P est dentro do crculo-circundante de qualquer tringulo em DT(P). Em outras palavras, essa regra estabelece que o crculo-circundante de um tringulo no deve conter outros pontos alm dos pontos do tringulo. A triangulao de Delaunay maximiza o ngulo mnimo e minimiza o ngulo mximo de todos os tringulos na triangulao. Essa tcnica foi inventada por Boris Delaunay em 1934. A triangulao de Delaunay usada com freqncia para construir malhas para o mtodo dos elementos finitos, as quais, para serem precisas e com boa qualidade, devem ser refinadas por algoritmos que obedecem regra do crculo-circundante.

Grafo, em cincia da computao, um tipo abstrato de dados que consiste de um conjunto de ns e um conjunto de arestas que estabelecem relaes (conexes) entre os ns. Um grafo G definido como segue: G=(V,E), onde V um conjunto finito, no-vazio de vrtices e E um conjunto de arestas (ligaes entre pares de vrtices). Quando as arestas no grafo no tem direo, o grafo chamado no-direcionado; caso contrrio, chamado direcionado. Na prtica, associada alguma informao a cada n e a cada aresta.

Grafo Direcionado Acclico um grafo direcionado que no possui ciclos.

rvore balanceada uma rvore cuja altura da subrvore esquerda de cada n nunca difere em mais que 1 da altura de sua subrvore direita.

Captulo I

Introduo
1.1 Introduo
O problema da localizao planar de pontos est presente em muitas aplicaes que operam sobre algum domnio geomtrico decomposto em regies. O problema definido como segue: dada uma subdiviso do plano modelada por um grafo planar de linhas retas (PSLG) G com n vrtices e um ponto de consulta Q, determine qual regio da subdiviso contm Q. um dos mais importantes problemas da geometria computacional e tem sido extensamente investigado nos anos recentes, tendo aplicao em muitas reas. A localizao planar de pontos desempenha funo essencial, sobretudo, em sistemas de informaes geogrficas. Nesse contexto, dados um mapa e um ponto de consulta especificado por suas coordenadas, objetiva-se encontrar a regio do mapa que contm aquele ponto. Note-se que um mapa nada mais que uma subdiviso do plano em regies, uma subdiviso planar. Considere por, exemplo, a mera exibio da localizao atual de agentes (como veculos automotores, embarcaes, aeronaves, aparelhos telefnicos celulares, pessoas, animais) ou de evento fsico (como foco de incndio, abalo ssmico) em um mapa armazenado eletronicamente. Trata-se de um procedimento relativamente simples. No entanto, em tempo real, localizar e relatar, de modo rpido e automtico, o nome da regio em que se encontra o agente ou ocorre um evento uma tarefa custosa. A modalidade mais elementar do problema de localizao planar de pontos determinar se um ponto interno a um dado polgono (PSLG). Um exemplo simples de aplicao o ato de clicar o boto do mouse dentro de uma forma geomtrica desenhada sobre uma tela de computador com o objetivo de executar alguma ao associada. Um outro exemplo, detectar se um sinal de aparelho telefnico celular provm de alguma regio especfica, por exemplo, a rea de um estabelecimento penitencirio sob vigilncia e monitoramento. Esse tipo de problema de localizao planar de pontos pode ser solucionado, tanto para polgonos

19

convexos e quanto polgonos no-convexos, com algoritmos geomtricos discutidos em (OROURKE, 1998). Exclusivamente para polgonos convexos, (WALKER, SNOEYINK; 1999) apresenta um algoritmo baseado em representao de Geometria Slida Construtiva (Constructive Solid Geometry CSG). Para determinar, por exemplo, se o tringulo ABC (Figura 1.1), que tem os vrtices A(x1, y1), B(x2, y2) e C(x3, y3), contm o ponto P(x, y), usa-se a frmula da rea do tringulo:

(1.1)

onde P1, P2 e P3 so os vrtices. Se for usado o valor absoluto do determinante, os vrtices podem ser tomados em qualquer ordem. Ento, para determinar se o tringulo ABC contm o ponto P, calcula-se a rea do tringulo ABC usando a Equao 1.1, definindo-se trs novos tringulos, cada um tendo como seus vrtices o ponto P e dois vrtices do tringulo ABC. Dessa operao, resultam trs nicos tringulos: ABP, BCP e CAP. Se o tringulo ABC contm o ponto P (Figura 1.2), ento AREA(ABP) + AREA(BCP) + AREA(CAP) = AREA(ABC). Se o tringulo ABC no contm o ponto P (Figura 1.3), ento AREA(ABP) + AREA(BCP) + AREA(CAP) > AREA(ABC).

Figura 1.1. Determinao se Figura 1.2. Se o ponto P um ponto P est dentro de um estiver dentro do tringulo tringulo ABC. ABC, o somatrio da rea dos trs novos tringulos ser igual rea de ABC.

Figura 1.3. Se o ponto P estiver fora do tringulo ABC, o somatrio da rea dos trs novos tringulo ser maior que a rea de ABC.

Para o problema de determinar em um mapa qual a regio que contm um determinado ponto uma generalizao do problema de determinar se um dado polgono contm um certo ponto existem basicamente dois tipos de algoritmos: ineficientes e timos.

20

Os algoritmos ineficientes so aqueles que empregam a fora bruta testando cada regio do mapa para verificar qual delas contm o ponto de consulta. O nmero de comparaes necessrias, no pior caso, pode ser igual ao nmero de regies do mapa. Os algoritmos timos so aqueles baseados em mtodos eficientes. A eficincia desses algoritmos aferida dos pontos de vista terico e prtico. A eficincia terica refere-se complexidade do algoritmo no pior caso. A eficincia prtica avaliada pela facilidade de implementao. O uso de estruturas de dados complicadas na busca de eficincia terica termina acarretando a concepo de um algoritmo pouco prtico. A eficincia terica dos algoritmos de localizao planar analisada sob trs atributos, relativamente ao nmero (n) de segmentos ou de vrtices que compem a malha: 1. Tempo de pr-processamento. O tempo requerido para construir a estrutura de pesquisa uma estrutura de dados contendo uma subdiviso adicional de um PSLG para agilizar as consultas de pontos. O(n log n) o requisito de tempo ideal. 2. Espao. O armazenamento usado para construir e representar a estrutura de pesquisa. O(n) o requisito de espao ideal. 3. Tempo de pesquisa. O tempo requerido para localizar um ponto na estrutura de pesquisa. O(log n) o requisito de tempo ideal para cada pesquisa realizada. Como a eficincia prtica dos algoritmos timos dependente de sua implementao, na prxima seo sero esboados algoritmos com eficincias tericas variadas, sem qualquer discusso sobre eficincia do ponto de vista prtico.

1.1.1 Algoritmos de Localizao Planar de Pontos Existentes


Nesta seo, ser traado o perfil dos algoritmos de Shamos, Lee e Preparata, Preparata, Kirkpatrick (EDAHIRO; KOKUBO; ASANO, 1984) e Berg et al. (BERG, 1997).

a) Algoritmo de Shamos Este algoritmo particiona o plano em linhas horizontais, conhecidas por slabs, que atravessam os vrtices do PSLG (Figura 1.4). Dessa forma, cada aresta do PSLG dividida em segmentos por aquelas linhas horizontais. Para cada slab, construda uma rvore binria. Em cada rvore binria, so representados os segmentos da slab ordenados pela coordenada x. Dado um ponto de consulta P(x, y), primeiro encontra-se a slab que contm

21

P atravs do valor de sua coordenada y. Depois, a localizao de ponto concluda com outra pesquisa na rvore binria daquela slab pela coordenada x.
Slab 9 Slab 8 Slab 7 Slab 6 Slab 5 Slab 4 Slab 3 Slab 2

Slab 1 Slab 0

Figura 1.4. Um PSLG particionado em slabs horizontais. No pior caso, o tempo de pesquisa O(log n) e, tanto o tempo de pr-processamento quanto o espao requeridos so O(n2).

b) Algoritmo de Lee e Preparata Nesse algoritmo, o PSLG decomposto em um conjunto de cadeia montona um caminho do vrtice mais inferior, com menor valor para coordenada y, at o vrtice mais superior, com maior valor para a coordenada y. Cada aresta desse caminho direcionada no sentido do topo e ordenada da esquerda para a direita. A decomposio do PSLG somente ocorre se o PSLG for regular, isto , se todo vrtice for um ponto inicial de uma aresta e um ponto terminal de outra aresta, exceto no vrtice mais inferior e vrtice mais superior. Se o PSLG no for regular, ele regularizado pelo algoritmo plane-sweep (OROURKE, 1998), como uma etapa de pr-processamento que toma tempo O(n log n). O algoritmo localiza um ponto de consulta em O((log n)2) e requer espao O(n).

22

V11 V10 V9 V8 V7 V6 V5 V4

V3 V1

V2

Figura 1.5. Um PSLG decomposto em um conjunto de cadeias montonas (O procedimento de regularizao adicionou novas arestas (v2, v3), (v5, v6) e (v7, v8)) ao PSLG. c) Algoritmo de Preparata Esse algoritmo um melhoramento do algoritmo de Shamos por meio da subdiviso de cada aresta em O(log n) segmentos. As pesquisas so feitas, simultaneamente, nas direes x e y, em uma rvore que representa a estrutura hierrquica das slabs. O algoritmo apresenta estrutura de dados complicada que representa regies do PSLG com slabs e trapzios. A estrutura de pesquisa construda em tempo O(n log n) e com espao O(n log n).Cada pesquisa requer tempo O(log n).

d) Algoritmo de Kirkpatrick O algoritmo utiliza um grafo acclico direcionado (DAG Directed Acyclic Graph) com raiz como estrutura de dados adicional e requer que as faces do PSLG sejam triangulares. Considere a tarefa de localizao de pontos em uma subdiviso planar do plano, como o polgono abaixo:

23

Figura 1.6. Um polgono com faces irregulares.

Como se pode ver, cada subdiviso identificada com uma letra que ser retornada na consulta de pontos. A soluo proposta por Kirkpatrick para responder a cada consulta de ponto em tempo O(log n), em que n o nmero de vrtices na subdiviso, segue os passos seguintes, demonstrados sobre o polgono da Figura 1.6: 1. Triangular a subdiviso se ela no contiver somente tringulos, conforme mostrado na Figura 1.7.

Figura 1.7. Polgono triangulado para construo da estrutura de dados de Kirkpatrick.

2. Construir a estrutura de dados.

2.1. Envolver a triangulao com um tringulo grande o suficiente de modo que nenhuma de suas trs arestas intercepte a triangulao. Os novos tringulos formados, representando faces externas triangulao, so rotulados com O como na Figura 1.8.

24

Figura 1.8. Triangulao envolta por um grande tringulo e conectada aos seus vrtices.

2.2. Encontrar um conjunto independente de vrtices com grau menor ou igual a oito dentro de cada casco convexo, que foram formados pelas faces internas da triangulao como na Figura 1.9.

Figura 1.9. Triangulao com conjunto independente de vrtices com grau 8.

25

2.3. Remover da triangulao o conjunto independente de vrtices com grau 8 (Figura 1.10).

Figura 1.10. Triangulao sem o conjunto independe de vrtices com grau 8.

2.4. Refazer a triangulao, seguindo a mesma regra para rotular as faces como mostrado na Figura 1.11.

Figura 1.11. Triangulao refeita.

26

2.5. Repetir os passos anteriores at que restem apenas os vrtices do grande tringulo. O grafo direcionado acclico (DAG) resultante do pr-processamento do algoritmo de Kirkpatrick mostrado na Figura 1.12. Cada n do grafo corresponde a um tringulo. Logo adiante, ser mostrado como efetuar procedimento de localizao de pontos.

Figura 1.12. Estrutura de pesquisa gerada pelo algoritmo de Kirkpatrick.

A consulta de pontos inicia-se pelo n-raiz do DAG. Se o tringulo a que se refere o n visitado no contm o ponto procurado, ento o ponto est fora da subdiviso. Caso contrrio, checa-se cada um dos ns-filhos e, recursivamente, caminha-se por sua descendncia checando at encontrar o n-folha indicando o tringulo que contm o ponto. Um exemplo de consulta de pontos est exemplificado nas Figuras 1.13 e 1.14 adiante.

27

Figura 1.13. Um ponto de consulta sobre uma face F da subdiviso original.

Figura 1.14. O caminho percorrido no DAG para localizar a regio que contm o ponto de consulta.

28

e) Algoritmo apresentado por Berg Berg et al. (BERG, 1997) apresenta um mtodo que cria uma estrutura de busca ao mesmo tempo em que se constri a triangulao de Delaunay. Seja p o ponto de consulta. Para encontrar o tringulo que contm p, usada a seguinte abordagem: enquanto se constri a triangulao de Delaunay, tambm se constri a estrutura de localizao de pontos D, que um DAG. As folhas de D correspondem aos tringulos da triangulao atual T, e so mantidos ponteiros entre as folhas de D e a triangulao. Os ns internos de D correspondem aos tringulos que estiveram na triangulao em algum estgio anterior, mas que j foram destrudos. A estrutura de localizao de pontos construda como segue. Inicializa-se D com um nico n-folha, que correspondente ao tringulo inicial p1p2p3, tambm chamado de supertringulo na triangulao de Delaunay incremental. Suponha que em algum momento, o tringulo pipjpk da triangulao atual seja dividido em trs (ou dois) tringulos. A correspondente mudana em D adicionar trs (ou dois) novas folhas ao grafo D e transformar o n-folha referente ao tringulo pipjpk em um n interno com ponteiros apontando para aquelas trs (ou duas) folhas recm-acrescidas. De modo semelhante, quando so substitudos dois tringulos pkpipj e pipjpl pelos tringulos pkpipl e pkplpj, por meio da remoo de uma aresta, so criadas folhas para os dois novos tringulos, e os ns pkpipj e pipjpl recebem ponteiros para as duas novas folhas. Como mostrado na Figura 1.15, quando um n-folha se torna um n interno, ele recebe, no mximo, trs ponteiros partido dele. Usando a estrutura de pesquisa D, pode-se localizar o prximo ponto p a ser adicionado na triangulao atual. Isso feito do seguinte modo: comea-se na raiz de D, que corresponde ao tringulo inicial p1p2p3. So checados os trs filhos da raiz para ver em qual tringulo o ponto p se encontra. Identificado o n, caminha-se para o seu primeiro filho e novamente feita a checagem para identificar o tringulo que contm o ponto p, e assim por diante, at que seja alcanado um n-folha em D. Esse n-folha corresponde a um tringulo na triangulao atual que contm o ponto p. Uma vez que o grau de sada de qualquer n no mximo trs, o procedimento para localizar um determinado ponto requer tempo O(log n) em relao ao nmero de ns no caminho de busca ou quantidade de tringulos armazenados em D.

29

Diviso do tringulo T1 aps a insero do ponto p:

Remoo da aresta pipj para atender a propriedades de Delaunay:

Remoo da aresta pipk para atender a propriedades de Delaunay:

Figura 1.15. O efeito da insero do ponto p no do tringulo T1 sobre a estrutura de dados D. Somente so mostradas as partes que sofreram alteraes. Na Figura 1.16 adiante, ilustrada, em um DAG, a histria da construo incremental de uma triangulao de Delaunay. Nela, demonstrada a complexidade assinttica, no pior caso,

30

para cada pesquisa realizada, no mtodo apresentado por Berg et al. em (BERG, 1997). Assim, considerando-se um total de 13 tringulos, incluindo todos aqueles presentes em algum estgio anterior e tambm na triangulao atual, obteve-se o seguinte resultado: N de ns (N): 13 Ns testados: 1, 2, 3, 4, 11, 12, 13 N de ns testados: 7 Complexidade: (3 * log3 N) => Constante * log3 N => O(log N)

10

11

12

13

Legenda:
Tringulo testado e em que um dos tringulos-filhos contm o ponto de consulta Tringulo testado, mas que nem ele nem quaisquer dos tringulos-filhos contm o ponto de consulta Tringulo em que se encontra o ponto de consulta

Figura 1.16. Pior caso da localizao de pontos no DAG referente histria de uma triangulao de Delaunay incremental. Comparado ao mtodo da fora bruta, o mtodo tratado por Berg et al. utiliza estrutura de pesquisa hierrquica que reduz o espao de busca, mas outros mtodos devem ser projetados para efetuar pesquisas em tempo logartmico. Alguns algoritmos de localizao planar de pontos no foram apresentados: alguns por serem complicados e distante de serem prticos, como o caso do de Dobkin e Lipton; outros,

31

por terem semelhanas com os que foram mostrados, como por exemplo, o algoritmo de Lipton e Tarjan que se assemelha ao de Shamos.

1.2 Motivao
A localizao planar de pontos um importante problema da geometria computacional. Em triangulao de Delaunay baseada em abordagem incremental, a localizao planar de pontos deve ser dinmica, ou seja, prover respostas enquanto a malha est sendo construda e constitui, portanto, um dos aspectos crticos eficincia do processo de gerao de malhas (BERG, 1997; OROURKE, 1998; MOUNT, 2002). Os dois procedimentos mais conhecidos para construir a estrutura de pesquisa so Slabs e Mapas Trapezoidais (BERG, 1997; OROURKE, 1998; MOUNT, 2002). Este ltimo possui medidas assintticas ideais para os trs atributos de eficincia, mas apresenta srias complicaes para tornar-se dinmico, ou seja, permitir alterao na estrutura de pesquisa para retratar eventos de insero ou remoo (de pontos, de segmentos ou de tringulos) durante a construo da malha. Uma delas utilizar grafo direcionado acclico como estrutura de pesquisa e requerer insero aleatria de segmentos para obter um grafo topologicamente de altura prximo a O(log n) similar a uma rvore balanceada. J as Slabs requerem espao O(n2), mas no exigem disposio aleatria, podendo, ser implementadas dinamicamente. Mucke et al. (MUCKE; SAIAS; SHU, 1996), por exemplo, apresentaram um procedimento para encontrar o ponto de consulta, no plano 2D e 3D, sem necessidade de estrutura de pesquisa, simplesmente caminhando atravs da triangulao, por amostragem randmica. Entretanto, diante dos resultados prticos obtidos, concluram que, em triangulaes com mais de um milho de pontos, um algoritmo de maior eficincia assinttica, mesmo requerendo pr-processamento e estruturas de dados adicionais, seria a melhor soluo para o problema de localizao planar de pontos. Como visto, a formulao de algoritmo de localizao planar de pontos que altera dinamicamente a subdiviso, medida que surgem eventos de insero ou remoo nos diagramas de Delaunay ou Voronoi (OROURKE, 1998), uma rea de pesquisa que se mantm ativa. Como a eficincia da localizao planar de pontos, fundamentalmente, depende da estrutura de dados e algoritmo empregados, nosso problema consiste em construir um algoritmo dinmico de localizao planar de pontos.

32

1.3 Objetivos
O principal objetivo deste trabalho formular e implementar um algoritmo de localizao planar de pontos que altera dinamicamente a subdiviso planar, medida que surgem eventos de insero ou remoo nos diagramas de Delaunay ou Voronoi (OROURKE, 1998). O objetivo secundrio discutir os aspectos crticos da gerao da malha Triangulao de Delaunay, sobretudo a baseada em abordagem incremental, em que se insere o problema da Localizao Planar de Pontos.

1.4 Contribuies
Este trabalho traz alguns resultados positivos para a geometria computacional, sobretudo, para a gerao automtica de malhas e localizao planar de pontos. 1. Constatao da robustez da linguagem de programao OCaml para tratar problemas de gerao de malhas. Em experimentos com a triangulao de Delaunay baseada em diviso-e-conquista, foi demonstrada a estabilidade numrica de OCaml para expressar nmeros na representao ponto-flutuante com alta preciso e a instabilidade numrica da linguagem C, que falhou em testes geomtricos, devido a erros de arredondamento, e produziu resultados divergentes (MOURA et al., 2005). 2. Criao da Multirvore-B Intervalar. Trata-se de uma estrutura de dados derivada da rvore-B, incrementada com mecanismo de pesquisa intervalar e arranjada

dinamicamente em camadas (MOURA et al., 2006). 3. Construo de algoritmo dinmico para o problema da localizao planar de pontos. O algoritmo (MOURA et al., 2006) forma a estrutura de pesquisa para a localizao medida que a malha construda, admitindo que os segmentos que constituem a malha sejam inseridos em qualquer ordem. Para tanto, a incluso de cada segmento modelada como um evento. O mtodo das Slabs utilizado para subdividir o plano. A Multirvore-B Intervalar empregada como estrutura de dados. Tanto a Multirvore-B Intervalar quanto o Algoritmo Dinmico de Localizao Planar de Pontos poderiam ter sido implementados com qualquer linguagem de programao. Em cada linguagem teriam um desempenho caracterstico. Aqui, eles foram implementados em OCaml, porque foi a linguagem de programao definida desde o incio da pesquisa.

33

1.5 Metodologia
Inicialmente, faz-se uma reviso bibliogrfica dos principais problemas relacionados localizao planar de pontos, sobretudo triangulao de Delaunay com a abordagem incremental. Aps esse levantamento, foi estudada a linguagem de programao OCaml (LEROY, 2003), uma linguagem funcional projetada pelo INRIA 1, que, decidiu-se, seria empregada na implementao dos algoritmos. Feito o estudo sobre OCaml, implementou-se, em OCaml, o algoritmo de Guibas-Stolfi (GUIBAS; STOLFI, 1985), melhorado por Geoff Leach (LEACH, 1992). Os resultados comparativos do cdigo implementado em OCaml com o cdigo implementado originalmente em C permitiram avaliar as vantagens e desvantagens de ambas as linguagens para tratar problemas geomtricos que dependem de preciso numrica. Na seqncia, foi implementado um gerador de malhas de elementos finitos bidimensional. As malhas produzidas pelo gerador foram utilizadas nos testes do algoritmo dinmico de localizao planar de pontos.

1.6 Estrutura da Tese


Nesta tese, no so discutidos aspectos tericos do mtodo dos elementos finitos, antes so tratados temas puramente relacionados qualidade da malha e otimizao do seu processo construtivo. A localizao planar de pontos constitui o tpico central da pesquisa, sendo a maior contribuio da tese o algoritmo dinmico baseado em eventos, utilizando o mtodo das Slabs como tcnica de subdiviso do plano e a Multirvore-B Intervalar como estrutura de dados. Dessa forma, os demais captulos da tese esto organizados como se segue: No Captulo 2, enfocada a gerao da malha como uma tarefa composta de mltiplas etapas. So relatados os procedimentos computacionalmente crticos, relevando sua importncia qualidade final da malha e ao seu processo de construo. Fala-se da complexidade dos domnios geomtricos, muitas vezes compostos de cavidades, fronteiras internas e formas complicadas. Tambm so discutidas as propriedades ideais de um gerador de malhas, principalmente a de construir uma malha segundo certos critrios de qualidade e a
1

Institute National de Recherche en Informatique et Automatique (Instituto Nacional de Pesquisa em Automao e Tecnologia da Informao, Rocquencourt, Frana).

34

de alguma condio de parada pr-estabelecida. A triangulao de Delaunay incluindo suas propriedades fundamentais, tipos e complexidades de algoritmos e a finalidade da localizao planar de pontos para o algoritmo de triangulao incremental outro tpico discutido. Finalmente, so apresentados outros dois tpicos relevantes para a qualidade da malha: a insero de pontos de Steiner, tambm chamada de triangulao de Steiner, e duas tcnicas de refinamento da malha melhoria de regies com tringulos de qualidade insatisfatria. No Captulo 3, so apresentados os resultados da implementao da triangulao de Delaunay pelo mtodo de diviso-e-conquista baseada no algoritmo de Guibas-Stolfi, utilizando OCaml. Foi nosso primeiro ensaio do emprego da linguagem OCaml na implementao de algoritmo geomtrico. So expostas ainda as caractersticas mais relevantes de OCaml e discutidas questes concernentes traduo de cdigo escrito em C para OCaml. No Captulo 4, apresentado um gerador de malhas escrito em OCaml e exibida uma galeria de objetos geomtricos cobertos por malhas uniformes e gradientes. A implementao do gerador de malhas seguiu o mesmo estilo de programao adotado na implementao do algoritmo de triangulao de Delaunay tratado no Captulo 3. No Captulo 5, apresentado um algoritmo dinmico de localizao planar de pontos, como soluo a um dos problemas importantes da geometria computacional. O algoritmo dinmico apresentado, embora tenha sido motivado pelo mtodo de fora bruta de localizao planar de pontos empregado no algoritmo do gerador de malhas, um algoritmo genrico, que pode ser til em outros contextos, como, por exemplo, aplicaes relacionadas a sistemas de informaes geogrficas. No Captulo 6, so apresentadas as concluses e indicaes de trabalhos futuros.

Captulo II

Aspectos Crticos da Gerao da Malha

2.1 Introduo
Os objetos do mundo real cujos fenmenos fsicos se pretende simular possuem peculiaridades importantes, como formato irregular, lacunas e estrutura material heterognea. Para possibilitar a construo automtica da malha, esses objetos so modelados por polgonos ou grafos planares de linhas retas PSLG. A gerao de malhas um procedimento complexo e custoso que resolve o problema de decompor um domnio geomtrico qualquer em partes menores denominadas de elementos. tambm uma tarefa demorada, em razo da complexidade dos domnios geomtricos e da necessidade de se produzir uma malha que propicie preciso simulao de fenmenos fsicos. Assim, a dificuldade computacional inerente construo da malha se justifica, sobretudo, em virtude de ela ocorrer como que proliferando e ajustando elementos geomtricos, circunscritos s fronteiras do polgono e sob outras restries impostas pelas caractersticas do objeto real, que lhe foram, de algum modo, transferidas.

2.2 Tipos de Domnios Geomtricos


Essa seo foi aqui inclusa por se entender que a complexidade geomtrica dos domnios (em duas ou trs dimenses) acarreta dificuldades algortmicas ao processo de construo da malha. Em duas dimenses, so distinguidos cinco tipos de domnios planares (BERN; PLASSMAN, 2000; BERN; EPPSTEIN, 1992). Na Figura 2.1, so mostrados quatro deles.

36

Conjunto de pontos. A entrada um conjunto de pontos no plano. Sem os pontos de Steiner, os vrtices da triangulao so exatamente os pontos de entrada, e a fronteira da triangulao o casco convexo; Polgono simples. Inclui apenas a fronteira externa e a regio interior; Polgono com buracos. um polgono simples acrescido de outros polgonos simples sem a regio interior. Sua fronteira tem mais que um componente conectado; Domnio mltiplo. um polgono com buracos contendo fronteiras internas; Domnio curvo. o que permite lados curvos. Em trs dimenses, as entradas, em sua maioria, tm tipos anlogos: Poliedro simples. topologicamente equivalente a uma esfera; Poliedro geral. Pode ser multiplamente conectado e ter cavidades, significando que sua fronteira pode ter mais que um componente conectado. Domnios polidricos mltiplos. So poliedros gerais com fronteiras internas; Domnios curvos tridimensionais. So aqueles que tm fronteiras curvas.

(a) (b) (c) (d) Figura 2.1. Tipos de entradas bidimensionais: (a) polgono simples, (b) polgono com buracos, (c) domnio mltiplo e (d) domnio curvo (BERN; PLASSMAN, 2000).

2.3 Tipos de Malhas


Existem trs tipos de malhas: estruturadas, no-estruturadas e hbridas. Uma malha estruturada (Figura 2.2 (a)) em duas dimenses muitas vezes uma grade quadrada deformada por algumas transformaes de coordenadas. Cada vrtice da malha, exceto aqueles das bordas, tem uma vizinhana local isomrfica. Em trs dimenses, uma malha estruturada normalmente uma grade cbica deformada. No estritamente necessrio armazenar os valores das coordenadas dos ns, pois eles podem ser implicitamente conhecidos pelo nmero de cada elemento. Uma malha no-estruturada (Figura 2.2 (b)) , na maioria dos casos, uma triangulao

37

com vizinhana local varivel. Uma malha hbrida (Figura 2.2 (c)) aquela resultante da combinao de malhas estruturadas e no-estruturadas. As malhas estruturadas oferecem certas vantagens e desvantagens sobre as noestruturadas. Elas so mais simples e tambm mais convenientes para uso em mtodos das diferenas finitas menos complexas. Elas requerem menos memria de computador, pois suas coordenadas podem ser calculadas em vez de explicitamente armazenadas. A maior desvantagem de uma malha estruturada a falta de flexibilidade em ajustar-se a um domnio com forma complicada, apesar de inmeras tcnicas para encontrar as transformaes de coordenadas apropriadas (BERN; EPPSTEIN, 1992).

(a) Estruturada

(b) No-estruturada Figura 2.2. Tipos de Malhas.

(c) Hbrida

2.4 Propriedades Desejveis de uma Malha e de Geradores de Malha


Na prtica, quando um domnio de entrada e uma condio numrica so dados, a gerao de malha segue trs passos (TENG, 1999): 1. Converter a geometria de entrada em uma representao2 padro, como PSLG; 2. Gerar uma malha construindo seu conjunto de pontos e elementos; 3. Aplicar um algoritmo de melhoramento e refinamento da malha como uma maneira de aprimorar a qualidade da malha construda no Passo 2. O Passo 3 tem por objetivo melhorar a qualidade da malha e reduzir o erro na aproximao provida pelo mtodo dos elementos finitos. Esse erro evolui com o tamanho do elemento e est relacionado aos ngulos mnimo e mximo. Por essa razo, o tamanho do

H vrias representaes para descrever a geometria de um domnio de entrada, como PSLG, PLS (uma extenso natural do PSLG para uma dimenso elevada), CSG, d-reps, dd-reps. Veja detalhes em (TENG, 1999).

38

elemento e dos ngulos mnimo e mximo so uma importante medida de qualidade tanto para gerao de malha como para interpolao de superfcie. Investigaes (SHEWCHUK, 2002) acerca do espectro de curvas de contorno demonstraram que o condicionamento de matriz de rigidez e a acurcia da interpolao e da simulao dependem do tamanho e forma dos elementos finitos e que medidas de qualidade devem ser estabelecidas. Infelizmente, as medidas de qualidade para interpolao e condicionamento de matriz so conflitantes (MOORE, 1992). Por exemplo, ngulos pequenos so ruins para

condicionamento de matriz, mas no para interpolao. Na interpolao, h dois tipos de erros: a diferena entre a funo interpolada e a funo verdadeira e a diferena entre o gradiente da funo interpolada e o gradiente da funo verdadeira. Erros no gradiente podem ser surpreendentemente importantes, se a aplicao de renderizao, construo de mapas ou simulao, porque eles podem comprometer a acurcia ou criar artefatos visuais no esperados. Por exemplo, seja f uma funo. Seja g uma interpolao linear de f sobre alguma triangulao. A Tabela 2.1 apresenta as medidas de qualidade relacionadas a tamanho e forma do elemento para trs critrios diferentes: erro de interpolao, erro de interpolao gradiente e condicionamento de matriz de rigidez. Tabela 2.1. Trs critrios para elementos lineares (SHEWCHUK, 2002).
Critrio
Erro de interpolao || f g || Erro de interpolao gradiente || f g ||

Medida de qualidade
- Tamanho muito importante - Forma dos elementos irrelevante

Forma dos elementos

Qualquer:

- Tamanho importante - ngulos grandes so ruins; pequenos so bons Condicionamento do autovalor - ngulos pequenos so ruins; grandes so bons mximo da matriz de rigidez Max

Tambm foi mostrado (SHEWCHUK, 2002) que a convergncia do mtodo dos elementos finitos falha quando os ngulos se aproximam de 180, como o tringulo mostrado na Figura 2.3.

Figura 2.3. Um tringulo de formato inadequado para o mtodo dos elementos finitos.

39

Os algoritmos de Chew (CHEW, 1989) e Ruppert (RUPPERT, 1995) mostraram-se eficazes em cumprir esses requisitos qualitativos. Tcnicas adaptativas como circle packing (BERN, 1994; BERN; MITCHELL; RUPPERT, 1994; BERN; EPPSTEIN, 1997) e quadtree (BERN, 2002) tambm satisfazem essas mtricas qualitativas. Circle packing uma tcnica introduzida por Bern, Mitchell e Ruppert (BERN; MITCHELL; RUPPERT, 1994) que preenche o domnio com crculos e depois constri a malha, acrescentando arestas entre o centro dos crculos e os pontos de tangncia nas suas fronteiras.

Chew provou que os algoritmos baseados em circle packing, cujos passos so ilustrados na Figura 2.4, calculam o local dos pontos a serem inseridos, chamados pontos de Steiner, e chegam a produzir uma malha em que nenhum ngulo mais agudo que 30 ou mais obtuso que 120.

Figura 2.4. Passos da triangulao baseada em circle packing (BERN, 1994; BERN; EPPSTEIN, 1997). Quadtree uma partio recursiva de uma regio do plano em quadrados alinhados aos eixos das coordenadas (Figura 2.5). A tcnica tambm chamada malha cartesiana, porque produzida por diviso repetitiva de um quadrado em quatro quadrados de do tamanho. Um quadrado, a raiz, cobre a regio inteira. Um quadrado pode ser decomposto em quatro quadrados-filhos, formados a partir dos pontos mdios de seus segmentos verticais e horizontais. A coleo de quadrados formam ento uma rvore, com os quadrados menores posicionados nos seus nveis mais inferiores. Octrees so uma generalizao das quadtrees para trs dimenses. Na Figura 2.6, exibida uma malha tetradrica derivada de uma octree.

40

Figura 2.5. (a) Uma quadtree. (b) Uma triangulao de um conjunto de pontos baseada em quadtree em que nenhum ngulo menor que 20 (SHEWCHUK, 1997). Em uma quadtree cujos quadrados foram triangulados (BERN; EPPSTEIN, 1992) podese garantir que todos os ngulos medem entre 36 e 80, sendo que, com algum melhoramento adicional, a triangulao pode se tornar equivalente a uma malha de tringulos equilteros.

Figura 2.6. A superfcie de uma malha tetradrica derivada de uma octree (BERN; PLASSMAN, 2000). Uma outra preocupao oferecer tanto controle quanto possvel sobre o tamanho dos elementos na malha. Idealmente, esse controle inclui a habilidade de dispor, em gradao, de pequenos a grandes elementos sobre uma distncia relativamente curta. A razo para esse requisito que o tamanho do elemento tem dois efeitos sobre uma simulao de elemento finito. Elementos pequenos, densamente empacotados, oferecem mais acurcia que os maiores, esparsamente empacotados; mas o tempo de computao requerido para resolver um problema proporcional ao nmero de elementos. Ento, a seleo do tamanho do elemento tem implicaes sobre a velocidade e exatido. Por outro lado, o tamanho do elemento requerido para alcanar uma dada preciso depende do comportamento do fenmeno fsico

41

que est sendo modelado e pode variar por todo o domnio do problema. Por exemplo, uma simulao de fluxo de fluido requer elementos menores em meio turbulncia que em reas de relativa tranqilidade; em trs dimenses, o elemento ideal em uma parte da malha pode variar em volume por um fator de milho ou mais do elemento ideal em outra parte da malha. Se elementos de tamanho uniforme so usados por toda a malha, deve-se selecionar um tamanho menor de modo a garantir acurcia suficiente na maior parte da poro de demanda do domnio do problema e por isso possivelmente incorrer em demandas computacionais excessivamente grandes. Para evitar essa cilada, o gerador de malha deve oferecer rpida gradao de tamanhos menores a maiores (SHEWCHUK, 1997). Um aspecto final que a malha deve se ajustar s fronteiras do domnio geomtrico de qualquer um dos tipos descritos na Seo 2.2. Veja, por exemplo, a malha que cobre a Figura 2.7, cuja fronteira inclui trs buracos.

Figura 2.7. Parte da triangulao de uma regio com trs buracos (BERN; EPPSTEIN; GILBERT, 1994). Alm de servir como instrumento de avaliao de mtodos de gerao de malha, as mtricas de qualidade apontaram o tringulo equiltero como o polgono ideal para representar os elementos da malha triangular bidimensional.

2.5 Triangulao de Delaunay


Nesta seo, ser discutida a triangulao de Delaunay em malhas no-estruturadas no plano Euclidiano bidimensional. A triangulao de Delaunay, semelhante s tcnicas de integrao ao segmentar a rea sob a curva produzida por uma funo, particiona a regio interna de um polgono. Na integral, os fragmentos so retngulos ou trapzios; na triangulao, esses fragmentos so tringulos.

42

Para um polgono ser decomposto dever ter mais de trs vrtices (Figura 2.8), ou seja, ter no mnimo uma diagonal. Desse modo, o polgono ser particionado em tringulos pela adio de uma ou mais diagonais. ORourke (OROURKE, 1998) apresenta uma propriedade, que quantifica o nmero de diagonais e tringulos aps a triangulao: toda triangulao de um polgono P de n vrtices usa n-3 diagonais e consiste de n-2 tringulos.

Figura 2.8. Triangulao de um polgono. Por outro lado, se a entrada para o algoritmo de triangulao for um conjunto de pontos no plano (Figura 2.9), a quantidade de tringulos e arestas dada como segue (BERG, 1997): Seja P um conjunto de n pontos no plano, no todos colineares, e k o nmero de pontos em P que esto sobre a fronteira do casco convexo de P. Ento, em qualquer triangulao de P h 2n-2-k tringulos e 3n-3-k arestas.

Figura 2.9. A triangulao de Delaunay sobre uma nuvem de pontos. De fato, essas duas propriedades so interessantes. Mas qual a importncia da triangulao de Delaunay para a gerao de malhas? Primeiro, a maioria dos polgonos que descreve objetos do mundo real tem formato irregular e regies pertencentes a diferentes domnios de interesse. Nesse contexto, a triangulao de Delaunay, conceitualmente, pode ser vista como uma estratgia de decompor um domnio em tringulos, respeitando suas caractersticas geomtricas, como um passo inicial do processo de discretizao. Desse modo, a triangulao de Delaunay funciona como uma espcie de gabarito para delimitar o espao de ocupao, o qual, posteriormente, ser

43

decomposto at que sejam atendidos todos os critrios de qualidade referentes rea e medida angular para cada tringulo. Segundo, a triangulao de Delaunay contribui para a qualidade da malha final, visto que, dado um conjunto de vrtices, maximiza o ngulo mnimo entre todas as maneiras possveis de triangular aquele conjunto (SHEWCHUK, 1997). Formalmente, uma triangulao de um conjunto V de vrtices um conjunto T de tringulos cujos vrtices coletivamente so V, cujos interiores no interceptam um ao outro e cuja unio o fecho convexo de V e cada tringulo que intercepta V o faz somente nos vrtices do tringulo. A triangulao de Delaunay D de V, introduzida, em 1934, pelo matemtico russo Boris Nikolaevich Delone depois chamado Boris Delaunay 3 , um grafo definido como segue. Qualquer crculo no plano tido como vazio se no cerca nenhum vrtice de V. Vrtices so permitidos sobre o crculo. Sejam u e v dois vrtices de V. Um crculo-circundante da aresta vw qualquer crculo que passa atravs de u e v. A aresta uv est em D se e somente se existe um crculo-circundante de uv. Uma aresta que satisfaz essa propriedade dita ser Delaunay. Na Figura 2.10, ilustrada uma triangulao de Delaunay sobre um conjunto de quatrocentos pontos no plano.

Figura 2.10. A triangulao de Delaunay sobre um conjunto de 400 pontos aleatrios. Cada aresta que conecta um vrtice a seu vizinho mais prximo Delaunay. Se w o vrtice mais prximo a v, o menor crculo que passa por v e w no circunda quaisquer outros vrtices.

44

A definio de um tringulo de Delaunay servir para garantir que o conjunto de arestas de Delaunay de um conjunto de vrtices coletivamente formam uma triangulao. O crculocircundante de um tringulo o nico crculo que passa atravs de todos os seus trs vrtices. Um tringulo dito ser de Delaunay se somente se seu crculo-circundante tem seu interior vazio. Essa definio caracterstica dos tringulos de Delaunay, ilustrada na Figura 2.11, chamada propriedade do crculo-circundante vazio (SHEWCHUK, 1999).

Figura 2.11. Cada tringulo em uma triangulao de Delaunay tem um crculo-circundante vazio (SHEWCHUK, 1999). Na seo seguinte, ser apresentada a definio da principal primitiva geomtrica para computar triangulaes de Delaunay.

2.5.1 O teste InCircle


Suponha a existncia de quatro pontos distintos no plano: A, B, C e D, conforme a Figura 2.12.

Figura 2.12. O teste InCircle.

Conforme a propriedade apresentada anteriormente e exemplificada na Figura 2.8, a triangulao do polgono exibido na Figura 2.12 originar dois tringulos por meio da
3

Delaunay uma transcrio de Delone em estilo francs.

45

insero de uma nica diagonal. Todavia, para completar a triangulao, tem-se que adicionar a diagonal AC ou a diagonal BD. O predicado InCircle prov a informao essencial que determina a estrutura topolgica dos diagramas de Voronoi ou Delaunay. Definio 2.1. O predicado InCircle(A, B, C, D) definido como verdadeiro se e somente se o ponto D for interior regio do plano limitada pelo crculo orientado ABC e ficar esquerda dele.

Em particular isso implica que D deve estar dentro do crculo ABC se os pontos A, B e C definem um tringulo orientado em sentido anti-horrio e fora se os pontos definem um tringulo em sentido horrio. Se A, B e C so colineares, interpreta-se a linha como um crculo adicionando-se um ponto no infinito. Se A, B, C e D so co-circulares, ento esse predicado retorna falso. Este teste equivale a perguntar se ABC + CDA > BCD + DAB. A aplicao prtica escolher as duas combinaes que determinem dois tringulos cuja soma dos ngulos mnimos seja a mxima. Outra forma equivalente desse teste dada abaixo, baseada na coordenada dos pontos. O teste InCircle(A, B, C, D) tambm equivalente a x2A + y2A x2B + y2B x2C + y2C x2D + y2D

D(A, B, C, D) =

xA xB xC xD

yA yB yC yD

1 1 1 1

>0

Qual a utilidade do teste InCircle para a construo de diagramas de Delaunay? Considere-se, por exemplo, o caso de quatro pontos que so vrtices de um quadriltero convexo ABCD, como mostrado na Figura 2.13. Os lados AB, BC, CD e DA esto no fecho convexo e, portanto, tm que ser inclusos. Para completar a triangulao, tem-se que adicionar a diagonal AC ou a diagonal BD. Pode-se decidir qual das duas ser adicionada, calculando InCircle(A, B, C, D). Se for falso, ento o crculo ABC livre de pontos e AC aresta de Delaunay. Caso contrrio, AC no aresta de Delaunay. Na figura abaixo, ilustrado o uso de InCircle para determinar qual das duas arestas aresta de Delaunay.

46

InCircle(A, B, C, D) = F

InCircle(A, B, C, D) = T (externo) InCircle(B, C, D, A) = F (interno)

Figura 2.13. Uso do predicado InCircle para decidir qual das duas arestas (AC ou BD) aresta de Delaunay. Essencialmente, todos os algoritmos de triangulao de Delaunay consistem em selecionar iterativamente a partir de um conjunto de vrtices um subconjunto de trs vrtices que satisfaa ao predicado InCircle e forme um tringulo. Ressalte-se que, entre todas as maneiras possveis de triangular aquele conjunto de vrtices, os tringulos formados possuem os ngulos mnimos maximizados e, conseqentemente, os ngulos mximos minimizados. Mais detalhes sobre o predicado InCircle podem ser encontrados em (GUIBAS; STOLFI, 1985).

2.5.2 Algoritmos para construir a Triangulao de Delaunay


Quatro tipos de algoritmos so usados para construir triangulaes de Delaunay: divisoe-conquista (GUIBAS; STOLFI, 1985), incremental (BERG, 1997), sweepline

(SHEWCHUK, 1997) e com restries (KALLMANN; BIERI; THALMANN, 2003). Os mais simples so os algoritmos de insero incremental. Em duas dimenses, existem algoritmos mais rpidos baseados em tcnicas de diviso-e-conquista e sweepline. Para se obter uma informao panormica desses e de outros algoritmos de triangulao de Delaunay bidimensionais, deve-se consultar Su (SU, 1994) e Drysdale (SU; DRYSDALE, 1995). Neste trabalho, sero discutidos apenas os algoritmos baseados em paradigmas de diviso-e-conquista, com restrio e incremental, em virtude de sua popularidade e importncia.

47

a) Diviso-e-Conquista
Em 1975, Shamos e Hoey apresentaram comunidade cientfica o primeiro algoritmo baseado em diviso-e-conquista, que requeria tempo O(n log n) para construir diagramas de Voronoi uma forma dual do diagrama de Delaunay. Mas somente em 1977, a tcnica foi pela primeira vez aplicada a problema de casco convexo por Preparata e Hong. Analogamente ao algoritmo mergesort, sua essncia dividir o problema em duas partes aproximadamente iguais, resolver cada uma delas recursivamente e criar uma soluo completa pela juno das duas meias solues. Quando a recursividade reduz o problema original em pequenos subproblemas, eles normalmente se tornam muito fceis de ser resolvidos. Esse algoritmo teoricamente importante, pois tem complexidade assintoticamente tima, mas de difcil implementao e, por essa razo, parece no ser usado com tanta freqncia quanto os outros algoritmos mais lentos. O'Rourke, por exemplo, preferiu ilustrar a implementao do algoritmo incremental em (OROURKE, 1998). O esboo do algoritmo de diviso-econquista o seguinte: 1. Os pontos so ordenados ao longo do eixo x; 2. Se houver trs ou menos pontos, a triangulao de Delaunay construda diretamente. Caso contrrio, os pontos so divididos em dois conjuntos aproximadamente iguais por uma linha perpendicular ao eixo x, o Passo 2 recursivamente aplicado para construir as triangulaes de Delaunay desses conjuntos, e os resultados so agrupados. O procedimento de combinar a triangulao dos dois subconjuntos a parte mais complicada e custosa do algoritmo. Uma exposio do algoritmo acompanhada de uma demonstrao de sua correo pode ser encontrada em (GUIBAS; STOLFI, 1985). Por brevidade, so omitidos aqui os detalhes, com a sugesto de que se consulte (GUIBAS; STOLFI, 1985). Na prtica, a tarefa compreende em tomar das duas subsolues, a da esquerda e da direita, os vrtices dos tringulos localizados prximos a uma linha imaginria perpendicular ao eixo x e refazer sobre tais vrtices a triangulao de Delaunay. Nesse processo de reconstruo, h eliminao e acrscimo de arestas (FIGUEIREDO; CARVALHO, 1991). A partir dos vrtices mais inferiores, em direo ao topo, toma-se sempre um vrtice pertencente ao conjunto da esquerda e um vrtice pertencente ao conjunto da direita. O critrio a ser atendido o que determina que existe uma triangulao de Delaunay se somente se houver trs vrtices sobre o crculo-circundante e nenhum em seu

48

interior. As arestas que satisfizerem a tal critrio so mantidas; as demais so eliminadas e substitudas por outras que atenderem ao critrio do crculo-circundante. Como exemplo, considere a triangulao de Delaunay de um conjunto de pontos, denotada por Del(C). A aplicao do algoritmo de triangulao de Delaunay por diviso-econquista resultar em duas triangulaes, denotadas por Del(C1) e Del(C2), de tamanho aproximadamente igual, localizados, respectivamente, esquerda e direita da mencionada linha vertical imaginria (Figura 2.14).
C1 C2

Figura 2.14. Triangulaes de Delaunay de C1 e C2, separadas por uma linha vertical imaginria. Na Figura 2.15, mostrada a construo de Del(C1 C2), a partir de Del(C1) e Del(C2). As arestas eliminadas de Del(C1) e Del(C2) so representadas em tracejado, enquanto as arestas acrescentadas pelo algoritmo so mostradas em negrito.

Figura 2.15. Triangulao de Delaunay de C1 C2.

b) Triangulao de Delaunay Restrita ou com Restries


A triangulao de Delaunay com restries estrutura geomtrica fundamental, com aplicaes em interpolao, renderizao e em gerao de malhas, quando a triangulao requerida tiver que se ajustar forma do objeto que est sendo modelado.

49

A triangulao com restries definida como segue: Dado um conjunto C de pontos do plano e um conjunto G de segmentos com extremos em C (tais que dois elementos quaisquer de G no se interceptam a no ser em seus extremos), obter uma triangulao do fecho convexo de C, cujo conjunto de vrtices seja C e que inclua todos os segmentos em G (FIGUEIREDO; CARVALHO, 1991). A triangulao de Delaunay apresenta duas deficincias: uma que ela pode conter tringulos de qualidade pobre; a outra omitir algumas fronteiras do domnio geomtrico. A primeira deficincia motivada pelas caractersticas geomtricas do PSLG e suprida pela insero de pontos de Steiner, tambm chamada de triangulao de Steiner. A segunda deficincia provocada pela tentativa de obteno de tringulos de qualidade e reparada pela triangulao de Delaunay com restries. Na Figura 2.16 (b), mostrada uma triangulao de um PSLG (a) em que o tringulo da base de m qualidade e a linha tracejada mostra o segmento que foi omitido. Ambos os problemas podem ser solucionados pela insero de vrtices adicionais, como ilustrado na Figura 2.17. Infelizmente, isso somente aplicvel em duas dimenses.

(a) Um PSLG.

(b) Triangulao do PSLG com tringulos de qualidade pobre, ausncia de segmentos originais e presena de segmentos indevidos.

Figura 2.16. Amostra das deficincias da triangulao de Delaunay (SHEWCHUK, 1997).

Figura 2.17. Amostra da correo provida pela insero de pontos de Steiner (SHEWCHUK, 1997). Chew apresentou um algoritmo de triangulao de Delaunay com restrio, mostrando que ela tambm pode ser obtida em tempo O(n log n), usando a tcnica de diviso-econquista.

50

A triangulao com restries de um dado PSLG similar triangulao de Delaunay, exceto que nela todo segmento de entrada aparece como uma aresta da triangulao. Contudo, para preservar as caractersticas geomtricas do PSLG, mantendo todos seus segmentos, algumas arestas podem no atender propriedade da triangulao de Delaunay, violando a regra do predicado InCirle, apresentado na Seo 2.5.1. Em outras palavras, uma triangulao de Delaunay com restrio no necessariamente uma triangulao de Delaunay, como ilustrado na Figura 2.18. Notem-se as diferenas no formato dos tringulos nos dois tipos de triangulaes.

(a)

(b)

(c)

Figura 2.18. (a) Um PLSG. (b) Uma triangulao de Delaunay do PSLG. (c) Uma triangulao de Delaunay com restries do PSLG (SHEWCHUK, 1997).

c) Incremental
Em algoritmos baseados na abordagem incremental aleatria, a distribuio aleatria de pontos mais vantajosa que a no-aleatria por ser mais resistente contra distribuies precrias de pontos. O desempenho dos algoritmos incrementais sobre essas distribuies superior (SU, 1994). Comportamento similar se verifica em algoritmos de pesquisa, em que a seleo randmica oferece boa proteo contra a ocorrncia do pior caso (KNUTH, 1998). Por exemplo, uma rvore binria cujos elementos so inseridos em ordem aleatria tende a ser balanceada, ao passo que, se a insero proceder em ordem ascendente ou descendente, a rvore ter topologia assimtrica, favorecendo a ocorrncia do pior caso. No algoritmo incremental, a triangulao inicia-se com um supertringulo que envolve todos os pontos de entrada, como mostrado na Figura 2.19.

51

Figura 2.19. Supertringulo contendo pontos a serem triangulados.

Depois, o algoritmo adiciona os pontos em ordem aleatria e mantm a triangulao de Delaunay do conjunto de pontos atual. Para ilustrar, considere a adio de um ponto pr. Primeiro, encontrado o tringulo da triangulao atual que contm pr. Se acontecer de pr cair sobre uma aresta e da triangulao, tem-se de adicionar arestas de pr para os vrtices opostos nos tringulos que compartilham e. Na Figura 2.20, so ilustrados esses dois casos. Em um dado momento, tem-se uma triangulao, mas no necessariamente uma triangulao de Delaunay. Isso porque a adio de pr pode tornar algumas arestas existentes ilegais. Para reparar isso, chamado um procedimento que substitui as arestas ilegais por arestas legais atravs de movimentao de arestas. Ao final, so descartados os trs vrtices do supertringulo e todas arestas incidentes.

pr est no interior de um tringulo

pr cai sobre uma aresta

Figura 2.20. Os dois casos em que se adiciona um ponto pr (BERG, 1997).

2.5.3 Complexidade dos Algoritmos de Triangulao de Delaunay


Aqui, destacada a ordem de complexidade assinttica e o nvel de dificuldade de implementao dos algoritmos de triangulao de Delaunay, uma vez que explanaes detalhadas podem ser encontradas em textos de geometria computacional. Na Tabela 2.2, verifica-se que dois desses algoritmos tambm possuem complexidade O(n log n), mas em

52

experimentos

realizados

por

Shewchuk

(SHEWCHUK,

1996b),

esses

algoritmos

apresentaram desempenho bem inferior ao do algoritmo baseado em diviso-e-conquista. Tabela 2.2. Complexidade de algoritmos de triangulao. Mtodo empregado Complexidade Implementao 2 Fora bruta Trivial (n ) Incremental Trivialidade relativa (n log n) Trivialidade relativa Sweepline (n log n) Diviso-e-conquista Complexa (n log n)

2.6 Insero de Pontos de Steiner


Em uma triangulao, todos os pontos de entrada so cobertos pelos vrtices dos tringulos formados pela triangulao de Delaunay; os pontos restantes ou adicionais so os pontos de Steiner. Na Figura 2.21, so contrastados os efeitos de uma triangulao com e sem pontos de Steiner.

(a)

(b)

Figura 2.21. Triangulaes: (a) sem pontos de Steiner e (b) com pontos de Steiner (BERN; EPPSTEIN, 1992). O processo de insero dos pontos de Steiner implica tanto a subdiviso de aresta, quando o ponto inserido sobre uma delas, quanto sua remoo, quando um conjunto de tringulos removido para possibilitar o surgimento de novos tringulos. Por razes tanto prticas quanto tericas, deve-se preocupar com o nmero de pontos de Steiner. O ngulo mnimo na triangulao de um conjunto de pontos pode aproximar-se de 60, mas, na prtica, o nmero de pontos de Steiner requerido para tal pode tornar o tempo de processamento proibitivo. Em malhas construdas segundo a triangulao de Delaunay, como so inseridos os pontos de Steiner? O critrio comum o estabelecimento de limite para o tamanho das arestas s, para a rea do tringulo a ou para a medida angular do tringulo. Dessa forma, enquanto

53

houver um tringulo em desconformidade com o critrio de qualidade estabelecido, seja com crculo-circundante de raio maior que s ou com rea maior que a, ou ainda com o ngulo mnimo inferior a um dado limite pr-estabelecido, o algoritmo adiciona um ponto de Steiner ao centro do crculo e recomputa a triangulao de Delaunay. Cada tringulo localizado e testado seqencialmente. O algoritmo, apresentado na Figura 2.22, escrito por Bern e Plassmann (BERN; PLASSMAN, 2000), exemplifica como so inseridos os pontos de Steiner. enquanto existir um tringulo t com ngulo menor que faa seja c o centro do crculo circunscrito de t se c est dentro do dimetro do semicrculo da aresta fronteiria e ento adicione o ponto mdio m de e seno adicione c fim_se recompute a triangulao de Delaunay fim_enquanto Figura 2.22. Algoritmo de insero de pontos de Steiner.

2.7 Localizao Planar de Pontos


Em algoritmos de triangulao de Delaunay incremental ou de paradigma resultante da combinao entre os paradigmas incremental e de diviso-e-conquista, a localizao planar de pontos til para determinar a que tringulo pertence cada ponto inserido na triangulao. Os requisitos mencionados obrigam a formulao de uma estrutura que suporte consultas sobre localizao de pontos.

2.7.1 Estruturas de Dados para Localizao de Pontos


A estrutura de dados definida deve manter a correspondente representao de algo como um PSLG, o qual deve ser pr-processado e armazenado de modo a responder s consultas sobre a regio poligonal em que se localiza um determinado ponto.

Na literatura de geometria computacional, so descritas duas estruturas: (a) subdiviso em slabs e (b) mapa trapezoidal.

54

a) Subdiviso em Slabs
Seja S uma subdiviso planar com n arestas. O problema de localizao planar de pontos armazenar S de modo a que possam ser respondidas consultas do seguinte tipo: dado um ponto de consulta q, reporte a face f de S que contm q. Se q se encontra sobre uma aresta ou coincide com um ponto, o algoritmo de consulta retornar essa informao. A estrutura de dados necessria para desempenhar consultas sobre localizao de pontos muito simples. Traam-se linhas verticais atravs de todos os vrtices da subdiviso, como na Figura 2.23. Isso particiona o plano em slabs. As coordenadas x dos vrtices so armazenadas ordenadamente em um array. Isso torna possvel determinar em tempo de O(log n) a slab que contm um ponto de consulta q. No interior de uma slab, no h nenhum vrtice de S. Isso significa que a parte da subdiviso colocada sobre a slab tem uma forma especial: todas as arestas que interceptam uma slab atravessam-na completamente elas no tm nenhum ponto extremo na slab e elas no cruzam uma a outra. Isso significa que elas podem ser ordenadas de cima para baixo. Note que toda regio na slab entre duas arestas consecutivas pertencem a uma nica face de S. As regies mais inferior e mais superior da slab esto fora dos limites e so parte da face ilimitada de S. A estrutura especial das arestas interceptando uma slab implica que ela pode ser armazenada ordenadamente num array. Rotula-se cada aresta com a face de S que est imediatamente acima, dentro da slab.

Figura 2.23. Subdiviso em slabs (BERG, 1997).

55

O algoritmo de consulta completo pode ento ser descrito como se segue. Primeiro, faz-se uma busca binria com a coordenada x do ponto de consulta q no array que armazena as coordenadas x dos vrtices da subdiviso. Isso informa a slab que contm q. Ento, efetuase uma busca binria com a coordenada y de q naquela slab. A operao elementar nessa pesquisa binria : dado um segmento s e um ponto q tal que a linha vertical atravs de q intercepta s, determine se q se encontra acima de s, abaixo de s ou sobre s. Isso informa o segmento diretamente abaixo de q. O rtulo armazenado com o segmento a face de S contendo q. Se for verificado que no h nenhum segmento abaixo de q, ento q se encontra na face ilimitada. O tempo de consulta para a estrutura de dados bom: foram efetuadas somente duas pesquisas binrias, a primeira em um array de comprimento de no mximo 2n (as n arestas da subdiviso tm no mximo 2n vrtices), e a segunda em um array de comprimento mximo n (uma slab cruzada por no mximo n arestas). Portanto, o tempo de consulta O(log n). Quais so os requisitos de armazenamento? Antes de tudo, tem-se um array para conter as coordenadas x dos vrtices, que usa espao de O(n). Mas tambm se tem um array para cada slab. Esse array armazena as arestas que interceptam a slab, requerendo, assim, espao para armazenamento de O(n). Uma vez que existem O(n) slabs, a quantidade total de espao de armazenamento O(n2). O grafo da Figura 2.24 exemplifica o pior caso da diviso em slabs.

Figura 2.24. Amostra do pior caso da diviso em slabs (BERG, 1997).

b) Mapas Trapezoidais
Examinando-se novamente a Figura 2.23, pode-se perceber que os segmentos e as linhas verticais que atravessam os pontos extremos definem uma nova subdiviso, cujas faces so

56

trapezides, tringulo e faces ilimitadas semelhantes a trapezides. Essa nova subdiviso chama-se mapa trapezoidal. Para facilitar a compreenso do tema, foram feitas duas simplificaes. Primeiro, ser introduzido um grande retngulo R alinhado aos eixos das coordenadas, que contm todo o cenrio, isto , que contm todos os segmentos de S. Na verdade, a ausncia desse retngulo no um problema: um ponto de consulta localizado fora dos limites de R sempre se encontra na face ilimitada de S. O objetivo restringir a ateno ao que acontece dentro de R. A segunda simplificao mais difcil de justificar: assume-se que em cada linha vertical no h mais que um segmento com a mesma coordenada x. No Subitem b.2 seguinte, so discutidas as providncias para tratar os casos que contrariam essa assuno. A conseqncia disso que no pode haver qualquer segmento vertical. Essa assuno no realstica nem usual: arestas verticais ocorrem freqentemente em muitas aplicaes como, para exemplificar, em uma malha triangular com inmeros elementos , porque a preciso das coordenadas muitas vezes limitada. O mapa trapezoidal T(S) de S tambm conhecido como decomposio trapezoidal de S obtido por meio de duas extenses verticais partindo de cada ponto extremo p de um segmento em S, uma extenso em sentido ascendente (extenso vertical superior) e outra em sentido descendente (extenso vertical inferior). As extenses param quando encontram outro segmento de S ou a fronteira de R. O mapa trapezoidal de S simplesmente a subdiviso induzida por S, o retngulo R e as extenses verticais superior e inferior. Um exemplo de mapa trapezoidal mostrado na Figura 2.25.

Figura 2.25. Um mapa trapezoidal (BERG, 1997).

57

Uma face em T(S) limitada por um nmero de arestas de T(S). Algumas dessas arestas podem ser adjacentes ou colineares. A quantidade de lados verticais e no-verticais em cada face do trapezide estabelecida da seguinte forma: Cada face em um mapa trapezoidal de um conjunto S de segmentos de linha em posio geral tem um ou dois lados verticais e exatamente dois lados no-verticais (BERG, 1997). Observe-se ainda que f est toda limitada, o que implica que ela no tem menos que dois lados no-verticais e que deve ter ao menos um lado vertical. Finalmente, note-se que o mapa trapezoidal digno de seu nome: cada face um trapezide ou um tringulo, que pode ser visto como um trapezide com uma aresta degenerada de comprimento zero. Antes de comprovar por que a localizao de pontos em um mapa trapezoidal ser mais fcil que uma localizao de pontos em uma subdiviso em slabs, ser verificado que a complexidade do mapa trapezoidal no to maior que o nmero de segmentos no conjunto que o define. A quantidade mxima de vrtices e de trapezides medida da seguinte forma: O mapa trapezoidal T(S) de um conjunto S de n segmentos em posio geral contm no mximo 6n + 4 vrtices e no mximo 3n + 1 trapezides (BERG, 1997). O mapa trapezoidal pode ser construdo incrementalmente. Um trapezide inicial adicionado e, em seguida, todos os segmentos da subdiviso poligonal um a um em ordem randmica. medida que cada segmento adicionado, o mapa trapezoidal atualizado. Para desempenhar a atualizao, necessita-se conhecer em qual trapezide o ponto extremo esquerdo do segmento se encontra. Essa questo respondida pelo algoritmo de localizao planar de pontos. Ento, traado o segmento de linha da esquerda para a direita, determinando quais trapezides ele intercepta. Finalmente, retorna-se a esses trapezides e os fixam para cima. O processo ilustrado na Figura 2.26.

Figura 2.26. Atualizao (incremental) de mapa trapezoidal.

58

b.1) Um Algoritmo Incremental Aleatrio


Os algoritmos incrementais aleatrios apresentam uma alternativa atrativa para a localizao planar de pontos. Eles constroem o mapa trapezoidal T(S) de um conjunto S de n segmentos. Durante a construo do mapa trapezoidal, construda tambm a estrutura de dados D, que pode ser usada para realizar consultas de localizao de pontos em T(S). A estrutura de dados D, chamada estrutura de pesquisa ou de busca, um grafo acclico direcionado (DAG Directed Acyclic Graph) com uma nica raiz. O grafo tem dois tipos de ns: folhas e internos. Os ns do tipo folha representam cada trapezide do mapa trapezoidal de S. Seus ns internos tm grau 4 mximo igual a 2. Por esse motivo, sua estrutura semelhante estrutura de uma rvore binria. H dois tipos de ns internos: ns-x, que so rotulados com um ponto extremo de algum segmento em S, e ns-y, que so rotulados com algum segmento de S. Uma consulta com um ponto q comea na raiz e procede ao longo de um caminho direcionado rumo a uma das folhas. Essa folha corresponde ao trapezide t T(S) que contm q. Em cada n no caminho, q tem de ser testado para determinar em qual dos dois ns-filhos prosseguir. Em um n-x, o teste da seguinte forma: q est esquerda ou direita da linha vertical que atravessa o ponto extremo armazenado neste n?. Em um n-y, o teste tem a forma: q est acima ou abaixo do segmento s armazenado aqui?. Os testes em ns internos somente tm dois resultados: esquerda ou direita de um ponto extremo, para um n-x, e acima ou abaixo para um n-y. E se ocorrer de um ponto de consulta situar-se exatamente sobre uma linha vertical ou sobre um segmento, qual ser a resposta do algoritmo? Na maioria dos textos sobre localizao planar de pontos com mapas trapezoidais, no ao menos aventado esse tipo de situao. Em (BERG, 1997), um ponto de consulta que acarreta tal situao considerado como pertencente a conjunto de segmentos que no esto em posio geral. No Subitem b.2 adiante, sero tratados especificamente esses casos. A estrutura de pesquisa D e o mapa trapezoidal T(S), processado por um algoritmo incremental aleatrio, esto interligados: um trapezide t T(S) tem um ponteiro para a folha de D correspondente a ele; um n-folha de D tem um ponteiro para o trapezide correspondente em T(S). Na Figura 2.27, exibido o mapa trapezoidal de um conjunto de dois segmentos, s1 e s2, e uma estrutura de pesquisa correlata. No DAG, os crculos brancos representam os ns-x, e os crculos cinzas, os ns-y; os quadrados representam os trapezides.

59

Figura 2.27. Um mapa trapezoidal de dois segmentos e a estrutura de pesquisa correspondente (BERG, 1997). Nas Figuras 2.32 e 2.33, esto descritos, respectivamente, um algoritmo que computa o mapa trapezoidal e que efetua pesquisa na sua correspondente estrutura de dados acerca da posio em que ser inserido um novo segmento. O algoritmo adiciona os elementos um a um e, depois de cada adio, ele atualiza a estrutura de pesquisa e o mapa trapezoidal. Contudo, a ordem em que os segmentos so adicionados influencia a estrutura de busca; algumas ordens levam a uma estrutura de pesquisa com um bom tempo de consulta, enquanto outras produzem uma estrutura de pesquisa com um tempo de consulta ruim. Dito de outra maneira, uma ordem ruim pode resultar em uma rvore de altura da ordem de (n); uma ordem boa resultar em uma rvore de altura de O(log n). E o tempo de pesquisa proporcional a essa altura. Com a abordagem incremental aleatria, os segmentos so adicionados em ordem randmica, e pode ser provado que a altura esperada da rvore O(log n); alm do mais, o tempo esperado para construir a estrutura inteira O(n log n). Adicionalmente, pode ser tambm provado que a probabilidade de a altura da rvore exceder a O(log n) pequena (OROURKE, 1998).
Algoritmo MapaTrapezoidal(S) Entrada. Um conjunto S de n segmentos de linhas planares. Sada. O mapa trapezoidal T(S) e uma estrutura de pesquisa D para T(S) em uma caixa delimitadora. 1. Determine uma caixa delimitadora R que contm todos os segmentos de S e inicie a estrutura do mapa trapezoidal T e a estrutura de pesquisa D para ele. 2. Compute uma permutao randmica s1, s2, ..., sn dos elementos de S. 3. para i 1 to n faa 4. Encontre o conjunto t0, t1, ..., tk de trapezides em T adequadamente interceptado por si. 5. Remova t0, t1, ..., tk de T e substitua-os pelos novos trapezides que aparecem por causa da interseo de si. 6. Remova as folhas para t0, t1, ..., tk de D e crie folhas para os novos trapezides. Conecte as novas folhas aos ns internos existentes adicionando alguns novos ns internos.

Figura 2.28. Um algoritmo incremental aleatrio (BERG, 1997).


4

O grau de um vrtice o nmero de arestas incidentes nesse vrtice.

60

Algoritmo EncontreTrapezoides Entrada. Um mapa trapezoidal T, uma estrutura de pesquisa D para T e um novo segmento si. Sada. A seqncia t0, ..., tk dos trapezides interceptados por si. 1. Seja p e q os pontos extremos esquerdo e direito de si. 2. Consulte com p na estrutura de pesquisa D para encontrar t0. 3. j 0; 4. enquanto q estiver direita de rightp(tj) faa 5. se rightp(tj) estiver acima de si 6. ento Seja tj + 1 o vizinho inferior direito de tj. 7. seno Seja tj + 1 o vizinho superior direito de tj. 8. jj+1 9. retorne t0, t1,..., tj

Figura 2.29. Um algoritmo de pesquisa em mapa trapezoidal (BERG, 1997).

O algoritmo MapaTrapezoidal computa o mapa trapezoidal T(S) de um conjunto de n segmentos planares e uma estrutura de busca D para T(S) em tempo esperado de O(n log n). O tamanho requerido pela estrutura de pesquisa O(n), e para qualquer ponto de consulta q, o tempo de consulta esperado O(log n) (BERG, 1997).

b.2) Lidando com Casos Degenerados Na explanao do tema sobre mapas trapezoidais e algoritmo incremental aleatrio, para simplificar, foram admitidas duas assunes. A primeira a de que no existem dois pontos extremos distintos com a mesma coordenada x. A segunda a de que um ponto de consulta nunca se encontra em uma linha vertical de um n-x, nem sobre o segmento de um n-y. A soluo para invalidar a primeira assuno e permitir que haja mais de um (muitos) ponto extremo distinto sobre uma mesma linha vertical rotacionar ligeiramente o sistema de eixos. Se o ngulo de rotao suficientemente pequeno, ento no haver mais que um ponto extremo distinto sobre uma nica linha vertical. Rotaes por meio de ngulos muito pequenos, no entanto, trazem dificuldades numricas. A melhor abordagem empregar um mapeamento chamado transformao shear, uma espcie de transformao por deformao, descrita na Frmula 2.1.

x x + y : y y
Frmula 2.1. A transformao shear (BERG, 1997).

61

Figura 2.30. Resultado da transformao shear (BERG, 1997). A transformao pode ser aplicada ao longo do eixo x mediante algum valor > 0. Tratase, na verdade, de uma espcie perturbao simblica, em que se aplica uma ordenao lexicogrfica pelo coordenada x, seguida pela coordenada y. Na Figura 2.30, ilustrado o efeito da transformao shear. Para um dado conjunto S de n segmentos planares, soluciona-se o problema executando o algoritmo MapaTrapezoidal sobre o conjunto S := {s : s S}. O resultado do teste que verificava se um ponto de consulta situa-se sobre um n-x, aps a transformao, : direita, esquerda ou sobre a linha. O resultado do teste que verifica se o ponto est sobre um n-y resulta em: acima, abaixo ou sobre. Particularidades de como a transformao opera esto descritas em (BERG, 1997). O objetivo aqui foi mostrar as estruturas definidas para processar consultas sobre localizao planar de pontos, evidenciando tanto suas vantagens quanto suas limitaes.

2.7.2 Eficincia dos Algoritmos de Localizao Planar


O primeiro algoritmo para o problema de localizao de pontos foi proposto por Dobkin e Lipton (EDAHIRO; KOKUBO; ASANO, 1984). Seu algoritmo tem tempo de pesquisa de O(log n), espao de O(n2) e tempo de pr-processamento de O(n2 log n). Desde ento, vrios algoritmos foram propostos. A eficincia dos algoritmos de localizao planar analisada sob trs aspectos: 1. Tempo de pr-processamento. O tempo requerido para construir a estrutura de pesquisa a partir de uma representao padro de um grafo; 2. Espao. O armazenamento usado para construir e representar a estrutura de pesquisa;

62

3. Tempo de pesquisa. O tempo requerido para localizar um ponto na estrutura de pesquisa. Como denotado na Tabela 2.3, extrada de (EDAHIRO; KOKUBO; ASANO, 1984), exceo dos algoritmos de localizao planar de pontos de Litpton-Tarjan e Kirkpatrick, todos os demais apresentam variaes entre si na quantidade de espao e tempo requeridos. Alguns so mais simples, outros possuem complicaes algortmicas e prticas. Entretanto, em comum, so orientados pelas coordenadas dos vrtices e particionam o plano em regies atravs de linhas verticais e/ou horizontais e as representam hierarquicamente em estruturas do tipo rvore. Tabela 2.3. Eficincias tericas dos algoritmos de localizao de pontos. Algoritmo Tempo de prEspao Tempo de pesquisa processamento Dobkin-Lipton O(n2 log n) O(n2) O(log n) 2 2 Shamos O(n ) O(n ) O(log n) Lee-Preparata O(n log n) O(n) O((log n)2) Lipton-Tarjan O(n log n) O(n) O(log n) Preparata O(n log n) O(n log n) O(log n) Kirkpatrick O(n log n) O(n) O(log n) Mtodo Bucket Caso mdio O(n) O(n) O(1) Pior caso O(n) O( n n ) O( n n ) Outros mtodos diferentes daqueles baseados em mapas trapezoidais foram propostos. Mucke et al. (MUCKE; SAIAS; SHU, 1996), por exemplo, apresentaram um procedimento para encontrar o ponto de consulta, no plano 2D e 3D, simplesmente caminhando atravs da triangulao, aps selecionar um bom ponto de partida por amostragem randmica. Em uma triangulao de Delaunay de n pontos aleatrios, a medida de eficincia esperada do mtodo prxima a O(n1/(d+1)), onde d a dimenso planar. Entretanto, diante dos resultados prticos obtidos, concluram que, em triangulaes com quantidade significativa de vrtices (por exemplo, acima de um milho), um algoritmo de eficincia assinttica superior, mesmo requerendo pr-processamento e estruturas de dados adicionais, seria a melhor soluo para o problema de localizao planar de pontos.

2.8 Refinamento da Malha


Uma das mais teis tcnicas de refinamento ou melhoramento, datada de 1960, chamada uniformizao Laplaciana. O nome se deve sua frmula de reposicionamento que

63

pode ser derivada de uma aproximao de diferenas finitas da equao de Laplace. Na uniformizao Laplaciana, um vrtice v, no interior de uma malha, movido para o centride (centro de massa) de seus vizinhos, como exibido na Figura 2.31.

Figura 2.31. Movendo um vrtice para o centro de massa de seus vizinhos (BERN; EPPSTEIN, 1992). A uniformizao Laplaciana aplicada sucessivamente a cada n interior da malha, por vrios ciclos. Uma segunda tcnica, chamada relaxao da malha, movimenta as arestas para regularizar graus angulares em tringulos. O problema de refinar uma dada malha ocorre com bastante freqncia na prtica, por exemplo, quando uma computao inicial de elementos finitos revela uma regio que requer maior resoluo (BERN; EPPSTEIN, 1992). Nos algoritmos de refinamento de Chew (CHEW, 1989) e de Ruppert (RUPPERT, 1995), a idia-chave do refinamento da malha a insero de um vrtice no centride de um tringulo de qualidade precria, mantendo-se a propriedade de Delaunay. Shewchuk, em seu programa Triangle (SHEWCHUK, 1996b), implementou uma medida para avaliar a qualidade de um tringulo, chamada proporo da aresta l ao raio do crculocircundante r. O circuncentro e o circunraio de um tringulo so, respectivamente, o centro e o raio de seu crculo-circundante. O quociente do circunraio de tringulo r e o comprimento l de sua menor aresta so a mtrica que naturalmente otimizada pelos algoritmos de refinamento. A proporo da aresta l ao raio do crculo-circundante r de um tringulo r/l est relacionada ao seu menor ngulo min por meio da frmula r/l = 1/(2senmin). Se B um limite superior da proporo da aresta ao raio do crculo-circundante de todos os tringulos em uma malha, ento no haver, aps o refinamento, qualquer ngulo menor que arc sen de 1/2B. O algoritmo de Ruppert (RUPPERT, 1995) emprega um limite de B =
2 ; o segundo

algoritmo de refinamento de Chew emprega um limite de B = 1. O primeiro algoritmo de refinamento de Chew (CHEW, 1989) divide todo tringulo cujo circunraio maior que o

64

comprimento da menor aresta na malha inteira, alcanando assim um limite de B = 1, mas fora todos os tringulos a terem tamanho uniforme. A noo de qualidade precria tambm inclui aqueles tringulos com alguma aresta com comprimento muito dspar do valor de B. Na Figura 2.32, v o centride do circuncentro do tringulo t. O algoritmo de refinamento constatou que t tem uma proporo da aresta ao raio do crculo-circundante maior que B e refez a triangulao de Delaunay levando em conta o vrtice v.

Figura 2.32. Refinamento de uma regio da malha com tringulo de qualidade insatisfatria. O vrtice v inserido, o tringulo t eliminado, mas a propriedade de Delaunay mantida. (SHEWCHUK, 1997). Uma vez que um tringulo de Delaunay no tem qualquer vrtice dentro de seu crculocircundante, uma triangulao de Delaunay uma estrutura ideal para encontrar pontos que esto distantes de outros vrtices. Da, conclusivamente, pode-se afirmar que uma malha triangular hipertima aquela formada por tringulo equilteros, cujo diagrama de Voronoi correspondente formado por hexgonos (pois o centride de cada tringulo da triangulao de Delaunay um vrtice do correspondente diagrama de Voronoi).

Captulo III

Implementao de Triangulao de Delaunay por Diviso-e-Conquista em OCaml

3.1 Introduo
Com a expectativa de que o compilador OCaml (LEROY, 2003) proporcionasse algum benefcio, como em alguns experimentos relatados em (THE COMPUTER LANGUAGE SHOOTOUT BENCHMARKS, 2006), em que o cdigo escrito em OCaml foi mais eficiente, implementou-se o algoritmo de Guibas-Stofi para a triangulao de Delaunay baseado em diviso-e-conquista o algoritmo mais rpido e eficiente em termos de requisitos de tempo

(n log n) e espao computacionais (n).


Foi selecionado o cdigo implementado em C por Geoff Leach (LEACH, 1992), o qual, com melhorias nos predicados InCircle e Valid, acelerou-se o algoritmo de Guibas-Stolfi em quatro a cinco vezes. Os resultados so apresentados neste captulo e em (MOURA et al., 2005).

3.2 O Algoritmo de Diviso-e-Conquista modificado por Dwyer


Foi apresentada, em (DWYER, 1986), uma modificao no algoritmo de Guibas-Stofi para computar a triangulao de Delaunay de n pontos no plano. Usando como entrada pontos distribudos uniformemente no quadrado unitrio, como exemplificado na Figura 3.1, a mudana reduziu o tempo esperado para o pior caso de (n log n) para (n log log n). Quanto aos resultados com distribuies no-uniformes, o autor disse que nada se pode afirmar sem um estudo adicional.

Figura 3.1. Exemplo de distribuio uniforme de pontos no quadrado unitrio.

66

3.3 Melhoramentos efetuados no Algoritmo de Guibas-Stolfi


Leach incorporou alguns melhoramentos ao algoritmo de diviso-e-conquista de GuibasStofi. Seus esforos foram dirigidos a testes de mensurao de tempo usando um milho de pontos distribudos aleatoriamente no quadrado unitrio e com estatstica detalhada provida pelo utilitrio gprof do sistema operacional UNIX. Foram feitos melhoramentos na estrutura de dados. A estrutura de dados original utilizada por Guibas-Stolfi, quad-edge, foi substituda pela estrutura de dados winged-edge. Os demais melhoramentos enfocaram os predicados InCircle e Valid. O predicado InCircle (A, B, C, D) define se o ponto D est no interior, fora ou em cima do crculo formado pelos pontos ABC. O predicado Valid (e) testa se a aresta e est acima ou no de uma determinada aresta. Os melhoramentos nesses predicados aumentaram a velocidade do algoritmo original em quatro a cinco vezes. Informaes detalhadas podem ser obtidas em (LEACH, 1992).

3.4 A Linguagem Objective Caml


Objective Caml (OCaml) uma linguagens de programao funcional projetada e implementada por Grard Huet, no INRIA, na Frana, por volta de 1994. Desde ento, seu desenvolvimento tem sido continuado como parte do projeto Cristal, agora conduzido por Xavier Leroy. uma descendente distante de Lisp, que incorpora caractersticas principais de outras linguagens. OCaml um acrnimo para Objective Categorical Abstract Machine Language derivada da linguagem ML (Meta-Language) clssica projetada, em 1975, na Universidade de Edimburgo, por Robin Milner, para o provador de teoremas LCF (Logic of Computable Functions). As linguagens ML so semifuncionais: o estilo de programao funcional, mas inclui atribuio de valor a identificadores e efeitos laterais. Na programao funcional, um programa uma funo aplicada a seus argumentos. Ele computa um resultado que retornado, quando a computao termina, como sada do programa. Desse modo, a combinao de programas acontece por composio de funes (DIVERIO, 1999), ou seja, a sada de um programa torna um argumento de entrada para outro. A seguir, so descritos alguns aspectos relevantes da linguagem: Verificao esttica de tipo. O compilador desempenha checagens de compatibilidade entre os tipos de parmetros formais e reais em tempo de compilao;

67

Inferncia de tipo. O programador no necessita dar qualquer informao de tipo. Essa inferncia ocorre juntamente com a verificao durante a compilao do programa. Na Figura 3.2 adiante, apresentado o cdigo de uma funo que implementa recursivamente a operao de multiplicao de nmeros inteiros. A palavra val indica que a funo fora avaliada pelo compilador e sua assinatura inferida em termos de dois argumentos inteiros como entrada e um inteiro como sada; Sistema de tipo polimrfico. possvel escrever programas que trabalham para valores de qualquer tipo, sejam bsicos como nmeros inteiros e na representao pontoflutuante, booleanos, caractere e strings ou sofisticados como tuplas, arranjos, listas, conjuntos, filas, pilhas, etc.; Gerenciamento automtico de memria. A alocao e desalocao de estrutura de dados so controladas de forma implcita e paralela pelo compilador. Tudo isso levado a efeito sem o emprego de primitivas comuns na linguagem C (new, malloc e free) e sem a necessidade de paradas no programa enquanto o mecanismo de coleta de lixo (garbage collection) est sendo executado; Trs modos de execuo. No modo interativo, o usurio escreve expresses em OCaml que comeam com o smbolo (#) e so terminadas com um ponto-e-vrgula duplo (;;). O interpretador avalia a expresso e imprime sua assinatura, como apresentado na Figura 3.2. O modo compilvel para bytecodes produz um cdigo executvel independente da arquitetura da mquina real onde ele roda. O modo compilvel para cdigo nativo gera um cdigo de alto desempenho, mas apenas para a arquitetura em que foi compilado.
Objective Caml version 3.07 # let rec mult m n = if n = 0 then 0 else m + mult m (n-1);; val mult : int -> int -> int = <fun>

Figura 3.2. Funo de multiplicao em OCaml.

3.5 Detalhes da Implementao


A eficincia de algoritmos fundamentalmente recursivos, como, por exemplo, aqueles que implementam mtodos de ordenao e busca (mergesort, rvore binria) deve-se, em

68

parte, estrutura empregada para representar os dados. Em linguagens de paradigma imperativo e orientado a objeto, usual a utilizao de ponteiros visando a obter acesso rpido a elementos da estrutura de dados em questo. Todavia, em linguagens funcionais, mesmo aquelas que admitem o estilo de programao imperativo, como OCaml, no natural o uso de ponteiros, pois tendem a acarretar srios efeitos colaterais. A recomendao que o algoritmo do problema a ser resolvido seja concebido abstratamente e seja implementado utilizando estilo funcional. De certo modo, isso implica ajustar todas as instrues e identificadores a operaes tpicas de listas. Para problemas de pouca ou moderada complexidade, a tarefa poder ser at interessante. Todavia, com problemas de alta complexidade, em geral com especificao envolvendo longos trechos de instrues, a tarefa, alm de exaustiva, poder ter desfecho frustrante. No caso da reescrita do programa de triangulao por diviso-e-conquista baseada no importante algoritmo de Guibas-Stolfi, insiste-se em manter o estilo de programao imperativo, por algumas razes: (i) assegurar a correspondncia morfolgica entre os cdigos para facilitar a depurao em caso de erros; (ii) esta pesquisa no tem por meta utilizar o estilo de programao funcional; (iii) alm de avaliar o desempenho provido por OCaml, de interesse saber como representar nessa linguagem a estrutura de ponteiros de modo simples, seguro e com a mesma versatilidade que em linguagens imperativas como C e Pascal.

3.5.1 Estrutura de Dados


No programa original, escrito em C, que usa alocao dinmica de memria, so definidas as estruturas point e edge, conforme descritas na Figura 3.3 adiante. O identificador p_array uma lista contendo os pontos de entrada para a triangulao; free_list_e controla a alocao das arestas medida que so criadas ou removidas. Preferiuse manter os tipos de dados do programa original, utilizando, por exemplo, o tipo float em vez de double.
struct point { float x, y; edge *entry_pt; }; point *p_array; struct edge { point *org; point *dest; edge *onext; edge *oprev; edge *dnext; edge *dprev; }; edge **free_list_e;

Figura 3.3. Estrutura de dados da triangulao em C.

69

type pedge = edge refer pointer refer (* *edge *) and ppoint = point refer pointer refer (* *point *) and point = { mutable x: float; mutable y: float; mutable entry_pt: pedge; mutable num: int } and edge = { mutable e_org: ppoint; mutable e_dest: ppoint; mutable e_onext: pedge; mutable e_oprev: pedge; mutable e_dnext: pedge; mutable e_dprev: pedge };; let p_array = new_refer (Array.init 1 (fun x -> (new_refer (new_pointer (new_refer ({x=0.0; y=0.0; entry_pt=new_refer (new_pointer Nil); num=(-1)}))))));; let free_list_e = Array.init 1 (fun x -> new_refer (new_pointer (new_refer {e_org=new_refer (new_pointer Nil); e_dest=new_refer (new_pointer Nil); e_onext=new_refer (new_pointer Nil); e_oprev=new_refer (new_pointer Nil); e_dnext=new_refer (new_pointer Nil); e_dprev=new_refer (new_pointer Nil)})));;

Figura 3.4. Estrutura de dados da triangulao em OCaml. Antes de derivar a estrutura da Figura 3.4 e reescrever o programa em OCaml, foram efetuados inmeros testes objetivando obter o tipo de dado (OCaml) em que pudessem ser realizadas todas as operaes tpicas de um ponteiro. A Tabela 3.1 apresenta a correspondncia entre ponteiros em C e em OCaml com base em extenso feita aos tipos definidos em (INRIA, 2004). Tabela 3.1. Ponteiros explcitos em C traduzidos para OCaml.
int k; int m; int *ptr; int *ptr2; int *p; int **q; ptr = &k; ptr2 = &k; k = 1; m = 2; ptr2 = &m; *ptr = 7; ptr2 = ptr; *ptr2 = 8; q = &p; **q = 100;

Instrues em C

let k = ref 0 and m = ref 0 and ptr = ref (new_pointer (ref 0)) and ptr2 = ref (new_pointer (ref 0)) and p = ref (new_pointer (ref 0)) and q = ref (new_pointer (ref (new_pointer (ref 0)))) in ptr := new_pointer k; ptr2 := new_pointer k; k := 1; m := 2; ptr2 := new_pointer m; !^(!ptr) := 7; ptr2 := !ptr; !^(!ptr) := 8; q := new_pointer p; (!^( !(!^(!q)) )) := 100;

Instrues em OCaml

A verso em OCaml do programa de triangulao nos termos dos exemplos apresentados na Tabela 3.1 forneceu os mesmos resultados que a verso em C, fazendo-se ressalva a alguns casos de falta de robustez numrica, em que o programa escrito na linguagem funcional foi mais estvel. Contudo, a codificao fora custosa, como se depreende do cdigo-fonte da funo delete_edge escrita em C (Figura 3.5) e em OCaml (para acomodar a constante Nil, a representao de ponteiros foi alterada de forma tal que os operadores ! e := foram respectivamente substitudos por !! e ^=), conforme Figura 3.6.

70

/* Remove an edge.*/ void delete_edge(edge *e) { point *u, *v; /* Cache origin and destination. */ u = Org(e); v = Dest(e); ... if (Org(e->dprev) == v) e->dprev->onext = e->dnext; else e->dprev->dnext = e->dnext; free_edge(e); }

Figura 3.5. Trecho de cdigo da funo delete_edge em C.


(* Remove an edge. *) let delete_edge e = let u = new_refer (new_pointer(new_refer ({x=0.0; y=0.0; entry_pt=new_refer (new_pointer Nil); num=(-1)}) )) and v = new_refer (new_pointer(new_refer ({x=0.0; y=0.0; entry_pt=new_refer (new_pointer Nil); num=(-1)}) )) in (* Cache origin and destination. *) u ^= !!(org e); v ^= !!(dest e); ... if ( !!(org (!!(!^(!!e)).e_dprev)) ) = !!v then (!!(!^(!! ( (!!(!^(!!e)).e_dprev) )))).e_onext ^= !!(!!(!^(!!e)).e_dnext) else (!!(!^(!! ( (!!(!^(!!e)).e_dprev) )))).e_dnext ^= !!(!!(!^(!!e)).e_dnext); free_edge e;; (*val delete_edge : pedge -> unit = <fun>*)

Figura 3.6. Trecho de cdigo da funo delete_edge em OCaml baseado em proposta do INRIA (INRIA, 2004). Portanto, em virtude da prolixidade notacional do programa em OCaml, as estruturas de point e edge exibidas anteriormente na Figura 3.4 foram modificadas para a forma exibida na Figura 3.7, e alterado o cdigo de todas as funes, como exemplificado na Figura 3.8.
type t_point = { mutable x: float; mutable y: float; mutable entry_pt: int; mutable num: int } and t_edge = { mutable org: int; mutable dest: int; mutable onext: int; mutable oprev: int; mutable dnext: int; mutable dprev: int; mutable e_num: int };; let p_array = ref [||];; let e_array = ref [||];; let free_list_e = ref [||];;

Figura 3.7. Estrutura de dados (simplificada) da triangulao em OCaml.

71

(* Remove an edge. *) let delete_edge e = let u, v = ref 0, ref 0 in (* Cache origin and destination. *) u := org e; v := dest e; ... if (org(!e_array.(e).dprev) = !v) then !e_array.(!e_array.(e).dprev).onext <- !e_array.(e).dnext else !e_array.(!e_array.(e).dprev).dnext <- !e_array.(e).dnext; free_edge e;; (*val delete_edge : int -> unit = <fun>*)

Figura 3.8. Trecho de cdigo (simplificado) da funo delete_edge em OCaml.

3.6 Resultados dos Experimentos


A Tabela 3.2 apresenta resultados dos experimentos realizados. Na implementao, foi utilizado o compilador ocamlopt constante de OCaml verso 3.07 e o IDE da Borland C++ Builder 1.0, a verso que estava disponvel. Os dados dos polgonos e nuvens de pontos foram lidos de arquivos-texto e depois ordenados pelo eixo x usando o conhecido mtodo mergesort. Vale ressaltar que todos os resultados no devem ser analisados sob o mesmo aspecto. No caso do contedo dos arquivos b10000.node, b100000.node e b1000000.node, importante considerar aspectos referentes a tempo de processamento. A verso escrita em OCaml foi menos eficiente em todos os trs casos (dez mil, cem mil e um milho de pontos). Porm, no caso do contedo de torre.poly, circulo.poly e boca.poly j interessante avaliar aspectos relacionados exatido. Por exemplo, na triangulao dos pontos contidos em circulo.poly e boca.poly, os resultados foram divergentes. Rastreando os cdigos-fontes (em C e OCaml), foi constatado que, na funo merge, os valores para o identificador cot_r_cand, em um mesmo instante da iterao, estavam diferentes, como demonstrado na Tabela 3.3 adiante. Ocorreu que a verso escrita em C falhou no clculo dos produtos escalar e vetorial e, usando a preciso-padro de seis casas decimais, tornou o valor de cot_r_cand inferior ao de cot_l_cand. Posteriormente, em uma instruo do tipo if-then-else que avaliava se o valor de cot_r_cand era menor que o de cot_l_cand, o programa escrito em C seguiu um caminho diferente do programa escrito em OCaml. Fatos semelhantes se repetiram em outras iteraes. Em razo disso, houve divergncia 5 na triangulao do crculo e da boca, conforme visualmente apresentado na Figura 3.9.

A aferio da qualidade da triangulao foi fundamentada em resultados de experimentos correspondentes produzidos pelo programa Triangle (SHEWCHUK, 1996b).

72

Tabela 3.2. Resultados da triangulao por diviso-e-conquista utilizando um PC com processador Pentium III de 1.13 GHz, 128 Mb de memria RAM e 256 Kb de memria Cache, sob o sistema operacional Windows 98. Dados de entrada Tempos de processamento (em segundos)
Nome do arquivo b10000.node b100000. node b1000000. node Nmero de pontos 10.000 100.000 1.000.000 Ordenao C OCaml 0.06 0.00 0.11 0.39 2.14 7.58 Triangulao C OCaml 0.05 0.16 1.10 2.58 16.26 98.92 Plotagem C OCaml 0.50 0.99 5.11 9.45 56.63 113.36

Desenho do PSLG

Verso em C

Verso em OCaml

Programa Triangle

torre.poly

circulo.poly

boca.poly Figura 3.9. Resultados visuais de triangulaes de PSLG.

3.6.1 Amostra da Robustez Numrica de OCaml


A atividade de achar algoritmos que produzem melhor preciso com menos clculo uma rea de pesquisa da matemtica atual denominada de anlise numrica. Entretanto, a Tabela 3.3 expressa resultados de operaes matemticas, implementadas em C e em OCaml, sem o

73

incremento de qualquer tcnica para melhorar a preciso. Os seis ltimos casos ilustram uma das ocorrncias causadoras da disparidade ocorrida durante a execuo do procedimento merge das verses em C e em OCaml do programa de triangulao. Tabela 3.3. Resultados de operaes matemticas envolvendo nmeros na representao ponto-flutuante.
Operao matemtica
2
( 2 )2

Resultado em C
1,4142135381698608 1,9999999315429164 3,1415926535897931 2,7182804690957534 1,0100501620330897 0,0201430507004261 0,0358115434646606 0,0097696194425225 0,0173690374940634 2,0618035793304443 2,0618050098419189

Resultado em Ocaml
1,4142135623730951 (*) 2,0000000000000004 (*) 3,1415926535897931 2,7182804690957534 1,0100501620330897 0,0201430318465498 (*) 0,0358115291409926 (*) 0,0097696121110349 (*) 0,0173690212811955 (*) 2,0618046671267440 2,0618046671267414

Pi=acos(-1) e = (1 + (1/x)) ^ x, para x=1000000 E ^ 0,01 D_p_l_cand = dot_product_2v (0,0000000000000000, -0,1204265073161450, 0,0811250971963144, -0,1672641040204717) D_p_r_cand = dot_product_2v (-0,0811250971963144, -0,1672641040204719, 0,0000000000000000, -0,2141017007247985) c_p_l_cand = cross_product_2v (0,0000000000000000, -0,1204265073161450, 0,0811250971963144, -0,1672641040204717) c_p_r_cand = cross_product_2v (-0,0811250971963144, -0,1672641040204719, 0,0000000000000000, -0,2141017007247985) cot_r_cand = d_p_r_cand / c_p_r_cand cot_l_cand = d_p_l_cand / c_p_l_cand
(*) Resultado mais preciso

3.7 Avaliao da Possibilidade de Paralelizao


A disponibilidade de mquinas com mltiplos processadores e com grande quantidade de memria pode ser um aliado para acelerar a triangulao e a gerao de malhas. Com tal motivao, muitos esforos tm sido orientados para o desenvolvimento de ambientes, geradores de malhas e trianguladores utilizando os recursos do processamento paralelo. Em princpio, a essncia desses esforos converter algoritmos seqenciais j existentes em algoritmos paralelos. Na gerao de malhas, o processamento paralelo recomendado para melhorar a eficincia tanto da fase de processamento quanto da fase de pr-processamento. No ltimo caso, aplica-se, em especfico, triangulao e ao refinamento da Malha. Ressalte-se que a eficincia do processamento paralelo depende da capacidade computacional da mquina, incluindo a quantidade de processadores, que em potncia de 2; depende tambm de um ambiente para criar e gerenciar o processamento paralelo e de um algoritmo e programa que faro a decomposio do problema em partes, que sero processadas separadamente. De modo geral, o processamento paralelo, descrito como segue:

74

1. Decomposio do domnio. Consiste em decompor o domnio geomtrico em p partes iguais (subdomnios), correspondentes ao nmero p de processadores disponveis. 2. Atribuir cada subdomnio a um processador. Cada processador produzir uma subsoluo. 3. Reunir as subsolues. um passo complexo que exige coordenao, tambm conhecido como Merge, que rene cada subsoluo gerada por cada processador e produz a soluo final. Uma estratgia de paralelizao tpica descrita na Figura 3.10. Na ilustrao, uma malha de elementos finitos usada como entrada. Depois, essa malha particionada em um nmero de subdomnios que sero distribudos entre os processadores e cada um dos processadores far a computao do subdomnio separadamente. Ocorre comunicao entre os processadores. Os ciclos de comunicao e de computao se encerram quando a soluo obtida atende aos requisitos de qualidade desejados. Os custos com computao e comunicao e tambm a forma como os subdomnios foram definidos so exemplos de fatores que podem impactar sobre o desempenho do processamento paralelo.

Problema

Decomposio do Problema

Subproblema 1

Subproblema 2

...
Troca de Dados

Subproblema n

Processador 1
Troca de Dados

Processador 2 (Subsoluo 2)

Processador n (Subsoluo n)

(Subsoluo 1)

Soluo

Figura 3.10. Uma estratgia tpica de paralelizao.

75

A maneira de particionar um domnio e de distribuir suas partes entre os processadores de um computador constitui uma poderosa ferramenta que pode ajudar a acelerar a soluo do problema. As tcnicas de partio podem ser classificadas em duas categorias: Tcnicas estticas: A partio realizada somente uma vez e antes da execuo do procedimento de soluo do problema. Tcnicas dinmicas: Usam algoritmos de balanceamento periodicamente determinam uma nova partio do problema. de cargas, que

Em se tratando da triangulao de Delaunay, sua maior desvantagem a quantidade de tempo requerido para obter a triangulao sobre um conjunto de pontos. Esse tempo pode ser reduzido com o uso de mais de um processador. Vrios algoritmos tm sido propostos (LEE, PARK, PARK; 2001), (CHEN, CHUANG, WU; 2002), (HARDWICK, 1997),

(CHERNIKOV, CHRISOCHOIDES; 2006), (MERRIAM; 1992). Seguem adiante as estratgias gerais empregadas comumente em algoritmos paralelos de triangulao de Delaunay. Vrios algoritmos paralelos para a triangulao de Delaunay tm sido propostos, cada qual com mtodos especficos de triangulao e de partio do domnio geomtrico ou do conjunto de pontos a ser triangulado. Por exemplo, em (CHEN, CHUANG, WU; 2002), apresentado um algoritmo paralelo para triangulao de Delaunay por diviso-e-conquista; em (CHERNIKOV, CHRISOCHOIDES; 2006), apresentado um algoritmo paralelo para triangulao de Delaunay restrita; em (LEE, PARK, PARK; 2001), proposto um algoritmo paralelo melhorado para a triangulao de Delaunay utilizando a abordagem de construo incremental; em (MERRIAM; 1992), so discutidos aspectos tericos e prticos referentes implementao de um algoritmo paralelo para triangulao de Delaunay baseado na abordagem avano de fronteira. Quanto eficincia obtida pelo processamento paralelo, os algoritmos que operam sobre domnios geomtricos 2D apresentam maior eficincia que aqueles que operam sobre domnios 3D. Detalhes podem ser obtidos em (KOHOUT; 2004) e (HARDWICK, 1997). Em um algoritmo paralelo de triangulao de Delaunay, os pontos de entrada so subdivididos de acordo com suas coordenadas em k reas retangulares (onde k o nmero de processadores). Cada processador responder exclusivamente pela triangulao dos pontos que estiverem na rea que lhe foi designada. Os pontos so distribudos a cada processadores em quantidades quase iguais. Para desempenhar sua tarefa, o processador precisa conter tambm os pontos que se encontram em reas adjacentes rea atribuda a este processador.

76

Existem no mximo quatro reas adjacentes. Os pontos localizados em reas adjacentes, prximo fronteira delas com a rea de cada processador, servem como uma interface. Uma mesma interface pode aparecer em mais de um processador. Dessa forma, possvel identificar os tringulos construdos redundantemente por mais de um processador. necessria uma etapa que rena os resultados parciais gerados por cada processador. A etapa de juno tem de levar em conta que cada processador gera muitos tringulos idnticos, que se sobrepem. Assim, cada tringulo redundante deve ser considerado apenas no processador em que aparecer primeiro. Todo procedimento do algoritmo, exceto o da etapa que rene os resultados parciais, pode ser processado paralelamente. Na Figura 3.11, est ilustrado o cenrio de uma triangulao de Delaunay de um conjunto de pontos em mquina com um nico processador. Na Figura 3.12, apresentado o cenrio dessa mesma triangulao em uma mquina com quatro processadores. O exemplo apresentado pode ser visto como o pior caso do processamento paralelo utilizando quatro processadores. Houve muito desperdcio de esforo computacional construindo tringulos redundantes. Na Figura 3.13, ilustrado como os resultados parciais so computados em cada um dos processadores. Os tringulos em cor cinza so aqueles que foram construdos redundantemente em mais de um processador.

Figura 3.11. Triangulao de Delaunay seqencial de um conjunto de pontos.

77

Figura 3.12. Triangulao de Delaunay de um conjunto de pontos em quatro processadores.

Figura 3.13. Resultados parciais da Triangulao de Delaunay nos quatro processadores.

Captulo IV

Gerador de Malhas escrito em OCaml

4.1 Introduo
Esto disponveis na web, como parte do site Meshing Research Corner (MESHING SOFTWARE SURVEY, 2005), mantido pela Carnegie Mellon University, informaes sobre dezenas de geradores de malhas. Os produtos de software apresentam caractersticas variveis, incluindo a forma dos elementos finitos (triangular, quadriltera, tetradrica, hexadrica, estruturada), o tipo de algoritmo utilizado (Avano de Fronteira, Sweeping, etc.) e o tipo de melhoramento e refinamento da malha adotados, por exemplo. Embora, para cerca de um quarto dos produtos haja indicao de disponibilidade do cdigo-fonte, na realidade, nem sempre esto disponveis para ser copiados, havendo recusa a pedidos de fornecimento por parte de seus autores. Foram examinados e executados os cdigos de EasyMesh (NICENO, 2005), Geompack (JOE, 1991), GMSH (REMACLE, 2005), Javamesh (LIN, 1997), Mesh2D (KARAMETE, 2005), Triangle (SHEWCHUK, 1996b) e apenas examinado o cdigo de TMG (PAOLINI, 2004). No foi examinada a biblioteca CGAL, pois foram considerados somente o contedo publicado no mencionado site. Relativamente qualidade da malha, apesar de comprovada superioridade de Triangle, GMSH e Javamesh, foi decidido no utilizar quaisquer deles como referncia para a implementao em OCaml. Os dois primeiros apresentavam elevada complexidade algortmica; e todos os trs requeriam bastante tempo para converso em virtude das tcnicas de programao complexas que foram empregadas. Finalmente, foi escolhido o cdigo-fonte do gerador de malhas chamado Mesh, construdo por Labelle (LABELLE; SHEWCHUK, 2003), na U. C. em Berkeley, o qual rene trs caractersticas favorveis: malha de boa qualidade, algoritmo com complexidade relativa e estilo de programao simples. Foi denominado de OCamlMesh o gerador escrito em OCaml. Triangle um rpido e robusto programa gerador de malhas e triangulador de Delaunay escrito em C. O programa de Labelle tambm escrito em C, mas no to clere quanto Triangle, porque emprega mtodo da fora bruta para implementar dois procedimentos

79

crticos: triangulao de Delaunay e localizao planar de pontos. Entretanto, essas desvantagens implicaram usar de preferncia seu cdigo para converso, pois propiciariam maiores oportunidades de pesquisa, experimentos e descobertas.

4.2 Caractersticas do Gerador


O programa possui cerca de 2.000 linhas de cdigo e foi projetado para plataformas compatveis com o UNIX, mas pode ser compilado em qualquer sistema operacional que suporte o padro ANSI C. Ele toma como entrada um PSLG, que, por definio, apenas uma lista de vrtices e segmentos. A tcnica empregada consiste em adicionar pontos de Steiner e, conseqentemente, arestas para dividir a regio interior em tringulos bem-formados. Na Figura 4.1, ilustrado o processo de gerao de malhas. Na Figura 4.1 (b), v-se um resultado da execuo do programa na linha de comando do sistema operacional. Para rodar o programa, sua a sintaxe a seguinte: ocamlmesh arq_entrada num_vertices angulo_minimo [arq_saida] O argumento arq_entrada deve ser um arquivo com extenso .node ou extenso .poly. Um arquivo com extenso .node contm um conjunto de pontos no plano, no sendo todos colineares. Um arquivo com extenso .poly representa um PSLG. Um arquivo .poly pode tambm conter informao sobre buracos e concavidades, bem como atributos sobre a regio e restries sobre as reas de tringulos. O argumento num_vertices indica o nmero total de vrtices da malha, ou seja, os vrtices originais do PSLG acrescidos dos pontos de Steiner inseridos. Por exemplo, o grafo da Figura 4.1 (a) contm nove vrtices. A malha da Figura 4.1 (b) contm exatamente 40 vrtices. Portanto, para a construo da malha, por fora do argumento 40, foram introduzidos 31 pontos de Steiner no PSLG. O argumento angulo_minimo indica a medida do ngulo mnimo de cada tringulo. Quando angulo_minimo for maior que 30, o valor para o argumento num_vertices deve ser (-1), e a malha ser gradiente. Nesse caso, o gerador somente tentar obter tringulos bem-formados, mas no do mesmo tamanho. Isso til quando uma aplicao requer tringulos menores somente prximo fronteira. O argumento arq_saida opcional e se refere a um arquivo com extenso .ele, o qual contm dados geomtricos dos elementos finitos que formam a malha.

80

(a) PSLG sem malha

(b) PSLG com malha (resultado da execuo ocamlmesh simple.poly 40 30.0) Figura 4.1. Sntese do processo de gerao da malha.

Nas Figuras 4.2 e 4.3 adiante, so descritos, respectivamente, o formato e exemplos do contedo dos arquivos com extenses .node, .poly e .ele. Estrutura do arquivo .node
Primeira linha: <# de vrtices> <dimenso (deve ser 2)> <# de atributos> <# de marcadores de fronteira (0 ou 1)> Linhas restantes: <vrtice #> <x> <y> [atributos] [marcador de fronteira]

Estrutura do arquivo .poly


Primeira linha: <# de vrtices> <dimenso (deve ser 2)> <# de atributos> <# de marcadores de fronteira (0 ou 1)> Linhas seguintes: <vrtice #> <x> <y> [atributos] [marcador de fronteira] Linha um: <# de segmentos> <# de marcadores de fronteira (0 ou 1)> Linhas seguintes: <segmento #> <ponto inicial> <ponto final> [marcador de fronteira] Linha um: <# de buracos> Linhas seguintes: <buraco #> <x> <y> Linha opcional: <# de atributos de regio e/ou restries sobre rea> Linhas opcionais seguintes: <regio #> <x> <y> <atributo> <rea mxima >

Estrutura do arquivo .ele


Primeira linha: <# de tringulos> <ns por tringulo > <# de atributos> Linhas restantes: <tringulo #> <n> <n> <n> ... [atributos]

Figura 4.2. Descrio do formato dos arquivos .node, .poly e .ele.

81

9.node
9200 1010 2110 3100 4000 5011 6111 7101 8001 9 0.3 0.4 0.5

simple.poly
9200 110 271 388 419 536 603 733 856 964 90 112 223 334 445 556 661 778 889 997 1 144

square.poly
4200 100 210 311 401 40 112 223 334 441 0

square.ele
22 3 0 1 10 1 14 2 1 10 15 3 3 11 16 4 11 3 17 5 2 12 18 6 13 4 19 7 2 8 12 8 9 4 13 9 6 5 10 10 5 7 10 11 9 5 11 12 5 8 11 13 8 5 12 14 5 6 12 15 7 5 13 16 5 9 13 17 6 10 14 18 10 7 15 19 11 8 16 20 9 11 17 21 12 6 18 22 7 13 19

Figura 4.3. Exemplos de contedo dos arquivos .node, .poly e .ele.

4.3 Estrutura de Dados


Uma estrutura usada para representar cada aresta e outra usada para representar cada tringulo (Figura 4.4). Cada registro que representa uma aresta contm dois ponteiros para vrtices e dois ponteiros para tringulos. Cada registro que representa um tringulo contm trs ponteiros para vrtices e trs ponteiros para arestas. Como ocorreu na implementao do algoritmo de triangulao de Delaunay por diviso-e-conquista, tambm foram mantidos os tipos de dados originais do gerador de malhas.
struct Edge { struct Vertex *vertex[2]; struct Triangle *triangle[2]; boolean frozen; } struct Triangle { struct Vertex *vertex[3]; struct Edge *edge[3]; float minAngle; float quality; boolean inside; }

(a) Estrutura da aresta (b) Estrutura do tringulo Figura 4.4. Estrutura de dados da aresta e do tringulo.

82

4.4. Notas sobre o Algoritmo


Nas Figuras 4.5 at 4.9, ilustrado o processo de gerao de malha a partir de um PSLG que representa uma guitarra eltrica. O primeiro estgio do algoritmo foi encontrar a triangulao de Delaunay dos vrtices de entrada como na Figura 4.5. Em geral, alguns dos segmentos de entrada e faces no aparecem na triangulao; o segundo estgio recuper-los. Na Figura 4.6, ilustrado o estgio de recuperao de segmentos e faces. O terceiro estgio do algoritmo remover tringulos de concavidades e buracos (Figura 4.7). O quarto estgio do algoritmo aplicar um algoritmo de refinamento, como descrito na Seo 2.8. Na Figura 4.8, mostrada a malha final, que no tem qualquer tringulo com ngulo inferior a 30.

Figura 4.5. PSLG de uma guitarra eltrica.

Figura 4.6. Triangulao de Delaunay dos vrtices do PSLG. Alguns segmentos originais e faces esto ausentes.

Figura 4.7. Triangulao de Delaunay em conformidade com os segmentos do PSLG.

83

Figura 4.8. Triangulao com tringulos removidos de concavidades e buracos.

Figura 4.9. Malha final (gerada por OCamlMesh) composta de 484 tringulos com ngulo mnimo no inferior a 30. A maior desvantagem do algoritmo ser lento para construir a malha com muitos (acima de dezena de milhar) pontos de Steiner, porquanto usa algoritmo de triangulao de Delaunay de complexidade O(n2) e algoritmo de localizao planar de pontos de complexidade O(n).

4.5. Detalhes da Implementao em OCaml


A primeira providncia para a converso de cdigo escrito em C para OCaml constituiuse em se adotar uma estrutura alternativa para representar os ponteiros e todas suas operaes. A definio de tipos para representar ponteiros proposta em (INRIA, 2004) possui notao complicada e trabalhosa para implementar ponteiros, sobretudo suas operaes tpicas, quando seu escopo de apontamento extenso. Por exemplo: ponteiros duplos, ponteiros triplos, etc.

A definio de tipos para retratar ponteiros proposta em (MOURA et al., 2005) tem notao simples e de fcil implementao. Seu princpio bsico simular em um vetor as posies de memria reservada para cada ponteiro. Por essa razo, foi utilizada tambm na reescrita do cdigo de Mesh em OCaml. A funo FindNeighbors, por exemplo, em sua assinatura requer ponteiros duplos. Na Figura 4.10, mostrada sua implementao em C e em OCaml.

84

void FindNeighbors(struct Edge *e, struct Triangle *t, let findNeighbors e t e0 e1 v = struct Edge **e0, struct Edge **e1, struct Vertex **v) if e = !triangleArray.(t).tr_edge.(0) then begin { e0 := !triangleArray.(t).tr_edge.(1); if (e == t->edge[0]) { e1 := !triangleArray.(t).tr_edge.(2); *e0 = t->edge[1]; v := !triangleArray.(t).tr_vertex.(2) *e1 = t->edge[2]; end *v = t->vertex[2]; else if e = !triangleArray.(t).tr_edge.(1) then begin } e0 := !triangleArray.(t).tr_edge.(2); else if (e == t->edge[1]) { e1 := !triangleArray.(t).tr_edge.(0); *e0 = t->edge[2]; v := !triangleArray.(t).tr_vertex.(0) *e1 = t->edge[0]; end *v = t->vertex[0]; else if e = !triangleArray.(t).tr_edge.(2) then begin } e0 := !triangleArray.(t).tr_edge.(0); else if (e == t->edge[2]) { e1 := !triangleArray.(t).tr_edge.(1); *e0 = t->edge[0]; v := !triangleArray.(t).tr_vertex.(1) *e1 = t->edge[1]; end *v = t->vertex[1]; else } Printf.printf "FatalError: edge 'e' is not part of else triangle 't'";; FatalError("edge 'e' is not part of triangle 't'"); (*Assinatura da funo: val findNeighbors : int -> int -> int ref -> int ref -> int ref -> unit = <fun>*)

(a) Implementao em linguagem C (b) Implementao em linguagem OCaml Figura 4.10. Cdigos da funo FindNeighbors.

Nas Figuras 4.11 e 4.12, descrita a estrutura de dados do gerador implementada, respectivamente, em linguagens C e OCaml.
struct Vertex { float x; float y; }; struct Edge { struct Vertex *vertex[2]; struct Triangle *triangle[2]; boolean frozen; }; struct Triangle { struct Vertex *vertex[3]; struct Edge *edge[3]; float minAngle; float quality; boolean inside; }; struct Segment { struct Vertex *endpoint[2]; }; struct Vertex *vertexArray; struct Edge *edgeArray; struct Triangle *triangleArray; struct Segment *segmentArray; struct Vertex *holeArray;

/* is the edge frozen? (not allowed to flip) */

/* store this expensive-to-compute value */ /* quality of the triangle */ /* is the triangle "inside" the mesh? */

Figura 4.11. Implementao da estrutura de dados do gerador em linguagem C.

85

type vertex = { mutable ve_x: float; mutable ve_y: float; mutable ve_num: int } and edge = { mutable ed_vertex : int array; mutable ed_triangle : int array; mutable ed_frozen : bool; (* is the edge frozen? (not allowed to flip) *) mutable ed_num: int } and triangle = { mutable tr_vertex : int array; mutable tr_edge : int array; mutable tr_min_angle : float; (* store this expensive-to-compute value *) mutable tr_quality : float; (* quality of the triangle *) mutable tr_inside : bool; (* is the triangle "inside" the mesh? *) mutable tr_num: int } and segment = { mutable se_endpoint: int array; mutable se_num: int };; let vertexArray = ref [||];; let edgeArray = ref [||];; let triangleArray = ref [||];; let segmentArray = ref [||];; let holeArray = ref [||];; (* Array de vrtices *) (* Array de ponteiros para vrtices *) (* Array de tringulos *) (* Array de ponteiros para vrtices *) (* Array de vrtices *)

Figura 4.12. Implementao da estrutura de dados do gerador em linguagem OCaml. Na prxima seo, apresentada uma amostra de malhas produzidas pelo gerador OCamlMesh.

4.6. Resultados da Triangulao de Domnios Geomtricos


Na Figura 4.13, so apresentados alguns casos de triangulao de domnios irregulares com buracos e concavidades somente para mostrar a uniformidade da malha obtida e a habilidade do gerador para lidar com domnios irregulares. As primitivas geomtricas moveto e lineto da biblioteca Graphics, que inclusa na distribuio da linguagem OCaml, foram usadas para plotar a malha.

86

(a) Malha uniforme sobre o PSLG key.poly: (b) Malha uniforme sobre o PSLG 675 tringulos motortrifas.poly, com buracos no eixo e nas ranhuras: 23.180 tringulos

(c) Malha uniforme sobre o PSLG (d) Malha uniforme sobre o PSLG africa.poly: 3.790 tringulos superior.poly: 9.423 tringulos Figura 4.13. Algumas malhas uniformes construdas pelo gerador OCamlMesh.

87

Na Figura 4.14, so apresentadas malhas gradientes, cada qual com variados tamanhos de tringulos em face da medida adotada para o ngulo mnimo do tringulo.

(a) Malha gradiente sobre o PSLG key.poly: (b) Malha gradiente sobre o PSLG 1.679 tringulos com ngulo mnimo de 34 motortrifas.poly: 182.877 tringulos com ngulo mnimo de 30

(c) Malha gradiente sobre o PSLG (d) Malha gradiente sobre o PSLG africa.poly: 1.276 tringulos com ngulo superior.poly: 3.059 tringulos com ngulo mnimo de 33 mnimo de 32 Figura 4.14. Algumas malhas gradientes construdas pelo gerador OCamlMesh.

Captulo V

Localizao Planar de Pontos Dinmica usando Multirvore-B Intervalar

5.1 Introduo
Um mapa uma representao do espao que divide o plano em um nmero finito de regies. Um mapa pode ser modelado por um PSLG. Dados um mapa e uma pergunta sobre um ponto p, especificado por suas coordenadas, o problema de localizao planar de pontos consiste em encontrar a regio no mapa que contm p. Algumas tcnicas de localizao planar de pontos existentes requerem uma estrutura de pesquisa adicional. A estrutura de pesquisa adicional representa uma subdiviso auxiliar do mapa para facilitar a obteno de resultados das pesquisas. Os algoritmos de localizao planar de pontos podem ser dinmicos ou esttico. Um algoritmo dinmico aquele que altera a estrutura de pesquisa medida que ocorrem eventos de insero ou de deleo na subdiviso planar. Ou seja, um algoritmo em que a estrutura de pesquisa construda juntamente com o mapa que ela representa. Um algoritmo esttico que no suporta modificaes na subdiviso planar, como o algoritmo dinmico. Entretanto, necessrio recursos adicionais para construir a estrutura de pesquisa. Tais recursos incluem tempo e espao. Conforme mostrado no Captulo 1, existem medidas ideais para o tempo requerido para construir a estrutura de pesquisa e para o espao necessrio para armazen-la. Por essa razo, a formulao de um algoritmo dinmico de localizao planar de pontos uma rea de pesquisa que se mantm ativa. A localizao planar de pontos dinmica tem utilidade em qualquer aplicao em que a subdiviso planar sofre mudanas ou evolui, seja de modo contnuo ou no. Um exemplo a triangulao de Delaunay incremental, j discutida no Captulo 2. Neste captulo, apresentado um algoritmo dinmico de localizao planar de pontos. No algoritmo, a tcnica das Slabs empregada para construir a estrutura de pesquisa, e a Multirvore-B Intervalar utilizada como estrutura de armazenamento dos dados.

89

A Multirvore-B Intervalar uma estrutura de dados derivada da rvore-B, uma rvore balanceada, aparelhada com mecanismo de pesquisa intervalar e organizada dinamicamente em nveis ou camadas.

5.2 rvores Balanceadas


Os algoritmos baseados em rvore de pesquisa binria (BST Binary Search Tree) trabalham bem para uma ampla variedade de aplicaes, mas, na prtica, apresentam problema de desempenho no pior caso, sobretudo, se o usurio do algoritmo no tomar cuidado em relao a alguns tipos de entrada. Por exemplo, arquivos com registros j ordenados, arquivos com chaves duplicadas, arquivos com alternncia de chaves grandes e pequenas: todos podem conduzir a tempos de construo de ordem quadrtica e tempos de pesquisa de ordem linear. O caso ideal manter as rvores perfeitamente balanceadas. Essas estruturas garantem que todas as pesquisas podem ser concludas em menos que log n + 1 comparaes, mas pode ser custoso mant-las para operaes de insero e remoo. Uma abordagem para produzir melhor balano em BST periodicamente rebalance-las explicitamente. De fato, pode-se balancear completamente a maioria das BST em tempo linear. Tal rebalanceamento melhorar o desempenho, mas sem garantias contra o desempenho de ordem quadrtica no pior caso. Por outro lado, o tempo de insero para uma seqncia de chaves durante operaes de rebalanceamento pode tornar-se proporcional ao quadrado do tamanho da seqncia; por outro lado, pode-se no pretender rebalancear freqentemente rvores de dimenses elevadas porque cada operao de rebalanceamento custa ao menos um tempo proporcional, de ordem linear, ao tamanho da rvore. Ento, o problema de garantir bom desempenho em pesquisas em estruturas do tipo BST solucionado por meio de trs abordagens algortmicas: randomizao, amortizao ou otimizao (SEDGEWICK, 1998). Um algoritmo aleatrio introduz deciso randmica para reduzir dramaticamente a chance de um cenrio de pior caso, sem se importar em que ordem os itens so apresentados para entrada. Um exemplo tpico desse arranjo o elemento aleatrio usado no procedimento de partio do algoritmo de ordenao quicksort. Outros exemplos so as rvores de pesquisa binria aleatrias, que usam cerca de 2n log n comparaes para ser construda com

90

n itens, independentemente de sua ordem de entrada, e cerca de 2 log n comparaes para efetuar pesquisas. Uma abordagem baseada em amortizao consiste em realizar trabalho extra em um momento para evitar trabalho adicional mais tarde. Dessa forma, ela capaz de garantir limites superiores ao custo mdio por operaes, que o custo total de todas as operaes dividido pelo nmero de operaes. Um exemplo a rvore Splay (SLEATOR; TARJAN, 1985). A abordagem da otimizao visa a garantir bom desempenho para cada operao. Os mtodos desenvolvidos segundo essa abordagem requerem que seja mantida nas rvores alguma informao estrutural. Um exemplo so as rvores-B. Uma vantagem em usar estrutura de pesquisa baseada em rvore-B que ela no se degenera, como exemplificado na Figura 5.1. Ela se mantm sempre balanceada (Figura 5.2), a um custo mnimo, independentemente da ordem de entrada dos ns. Uma outra vantagem no ter-se que utilizar insero aleatria de segmentos para, probabilisticamente, obter uma estrutura de pesquisa mais similar possvel de uma rvore balanceada, como ocorre com algoritmos de localizao planar baseados em mapas trapezoidais (BERG, 1997). Em vez de rvore, eles empregam grafo direcionado acclico como estrutura de pesquisa. Sabe-se que a rvore-B requer uma grande quantidade de espao para armazenamento e mais utilizada para busca em memria externa. Entretanto, como a rvore-B havia apresentado melhores resultados que a rvore Splay, que teve desempenho quase linear em experimentos de insero, deleo e pesquisa, confirmando o que tinha sido declarado por Sedgewick em (SEDGEWICK, 1998), preferiu-se utilizar primeiro a rvore-B, como estrutura bsica do algoritmo dinmico de localizao planar de pontos. Outros tipos de rvores balanceadas podem ser utilizados, como sugerido na indicao de trabalhos futuros no Captulo 6.

1 2 3 4 5 6 7
1 3 5 7 2 6 4

Figura 5.1. rvore binria totalmente degenerada. Figura 5.2. rvore binria balanceada.

91

5.2.1 A rvore-B
A rvore-B, introduzida, em 1972, por Bayer e McCreight, um tipo de rvore balanceada multidirecional largamente utilizada em sistemas gerenciadores de bases de dados (SGBD). Sua estrutura permite que registros sejam inseridos, removidos e recuperados com a garantia de desempenho satisfatrio no pior caso. Uma rvore-B de ordem m e com n ns tem altura O(log n) e satisfaz as propriedades adiante (KNUTH, 1998): 1. Cada n tem no mximo m filhos. 2. Cada n, exceto o da raiz e as folhas da rvore, tem ao menos m/2 filhos. 3. A raiz uma folha da rvore ou tem ao menos 2 filhos. 4. Todas as folhas aparecem no mesmo nvel. 5. Um n no-folha com k filhos contm k-1 chaves. Diferentemente de uma rvore binria, cada n de uma rvore-B pode ter um nmero varivel de chaves e filhos. Uma rvore de pesquisa multidirecional de ordem m uma rvore geral na qual cada n tem m ou menos subrvores e contm uma chave a menos que a quantidade de suas subrvores. Na Figura 5.3, em que mostrada uma rvore-B de ordem 4, cada n, exceto os folhas, tem entre [4/2] e 4 filhos, contendo uma ou trs chaves. Ao n-raiz permitido conter de uma a trs chaves; nesse exemplo, ele tem apenas uma. Todas as folhas esto no nvel 2. As chaves aparecem em ordem crescente da esquerda para a direita.

Figura 5.3. Uma rvore-B de ordem 4 com todas as folhas no nvel 2. Suponha uma rvore-B de ordem m contendo N chaves e que N + 1 folhas apaream no nvel l. Ento, o nmero de mximo de nveis, correspondente altura da rvore dado por 1 + logm N. Isso significa, por exemplo, que, se N = 1.999.998 e m = 199, ento l no mximo 3, que, no caso de pesquisa, equivale tambm ao nmero mximo de comparaes para encontrar um determinado elemento.

92

Em virtude da popularidade da rvore-B e da variedade de trabalhos escritos tratando de sua histria, estrutura, desempenho e aplicaes, sero enfocados os resultados de seu emprego na resoluo do problema de localizao planar de pontos.

5.2.2 A rvore-B Intervalar


Em uma rvore-B, assim como em uma rvore binria, uma operao de busca aquela que aceita um argumento a e tenta encontrar o registro cuja chave seja a. possvel que a busca de um determinado elemento na rvore no tenha sucesso, ou seja, que talvez no exista nenhum n da rvore cuja chave tenha o mesmo valor que o argumento usado na operao de busca. Nesse caso, o algoritmo que implementa a operao de busca pode retornar um ponteiro nulo ou um registro nulo. Essa regra, na prtica, incompatvel com as peculiaridades da localizao planar de pontos, pois, na maioria das vezes, valor do ponto de consulta no corresponde exatamente ao valor de nenhum dos vrtices dos segmentos armazenados na estrutura de dados usada como estrutura de pesquisa. Nas estruturas de pesquisas utilizadas para representar subdivises fundamentadas em slabs ou mapas trapezoidais, quando isso acontece, oportuno conhecer os ns com valor imediatamente anterior e posterior quele consultado. Por essa razo, a rvore-B teve seu algoritmo de busca aprimorado com um mecanismo de pesquisa intervalar. Um mecanismo de pesquisa que, em lugar de um sinalizador de insucesso, retorne, por referncia, se houver, os ns com valor imediatamente anterior e posterior. A esse tipo de rvore-B foi dado o nome de rvore-B intervalar. Assim, na rvore-B intervalar, em operaes de busca, quando no se encontra um n contendo a chave de mesmo valor que o argumento da busca, em lugar de um ponteiro ou registro nulos, retorna-se, se houver, o registro com valor imediatamente anterior ou, ainda, retorna-se o registro com valor imediatamente superior ao do argumento. Nas Figuras 5.4 e 5.5, so mostradas, em estilo negrito, modificaes, respectivamente, nos cdigos-fontes das funes binsearch e search para transformar a rvore-B em rvore-B intervalar. As modificaes efetuadas no cdigo da funo binsearch tm a finalidade reter o registro-candidato ao limite inferior, ou seja, o valor imediatamente inferior quele procurado. As modificaes feitas no cdigo da funo search tm a finalidade de reter o registro-candidato ao limite superior, ou seja, o valor imediatamente superior quele procurado. As variveis que no foram definidas no cabealho das duas funes so de escopo global.

93

1. let binsearch x a n p = 2. let i, left, right = ref 0, ref 0, ref 0 in 3. if !num_comp = 1 then begin 4. p_lower := p; 5. i_lower := !i; 6. lower_bound := a.(0) 7. end 8. else if x.k_coord > a.(0).k_coord && !lower_bound.k_coord <> a.(0).k_coord then begin 9. p_lower := p; 10. i_lower := 0; 11. lower_bound := a.(0) 12. end; 13. if x.k_coord <= a.(0).k_coord then 14. 0 15. else begin 16. if x.k_coord > a.(n-1).k_coord && !lower_bound.k_coord <> a.(n-1).k_coord then begin 17. p_lower := p; 18. i_lower := n-1; 19. lower_bound := a.(n-1) 20. end; 21. if x.k_coord > a.(n-1).k_coord then 22. n 23. else begin 24. left := 0; 25. right := (n-1); 26. while (!right - !left) > 1 do 27. i := (!right + !left)/2; 28. if x.k_coord > a.(!i).k_coord && !lower_bound.k_coord <> a.(!i).k_coord then begin 29. p_lower := p; 30. i_lower := !i; 31. lower_bound := a.(!i) 32. end; 33. if x.k_coord <= a.(!i).k_coord then 34. right := !i 35. else 36. left := !i 37. done; 38. !right 39. end; 40. end;;

Figura 5.4. Modificaes no cdigo da rvore-B para obteno do limite inferior. O procedimento para obter do limite inferior mais complexo que o procedimento para obter o limite superior. Essa diferena na complexidade herdada das caractersticas algortmicas das funes search e binsearch. Por exemplo, na linha 12 do cdigo da funo search, mostrado na Figura 5.5, descrita a condio de parada do cdigo original, sem levar em conta o conjunto de instrues para captura do limite superior. Se a condio de parada no atendida, ou seja, se se chegou ao ltimo elemento do n sem se ter encontrado uma chave com valor igual ao valor do elemento procurado, ento deve-se reter, como itens do limite superior: o valor do elemento visitado e os dois ndices referentes, respectivamente,

94

posio da elemento (chave) e do n no array que representa a rvore-B. J a reteno do limite inferior mais complicada, como mostram as linhas 3 a 12, 16 a 20 e 28 a 32 do cdigo da funo binsearch, mostrado na Figura 5.4.

1. let search x id_btree = 2. let p, i, n = ref 0, ref 0, ref 0 3. and k = ref (Array.init (2 * _M) (fun x -> {k_coord=(Array.init 2 (fun x -> 0.0)); k_indice=0})) 4. and result = ref {k_coord=(Array.init 2 (fun x -> (-1.0))); k_indice=(-1)} 5. and break = ref false in 6. p := !root; 7. while (!p <> (-1)) && (!break = false) do 8. i := 0; 9. k := !multi_page_array.(id_btree).mbt_btree.(!p).bt_key; 10. n := !multi_page_array.(id_btree).mbt_btree.(!p).bt_n; 11. i := binsearch x !k !n !p; 12. if (!i < !n) && (x.k_coord = !k.(!i).k_coord) then begin 13. found !p !i id_btree; 14. result := !multi_page_array.(id_btree).mbt_btree.(!p).bt_key.(!i); 15. break := true 16. end 17. else begin 18. if (!i < !n && !num_comp = 1) || 19. (!i < !n && x.k_coord < !k.(!i).k_coord && !upper_bound.k_coord <> !k.(!i).k_coord) then begin 20. p_upper := !p; 21. i_upper := !i; 22. upper_bound := !k.(!i) 23. end 24. end; 25. if not !break then 26. p := !multi_page_array.(id_btree).mbt_btree.(!p).bt_branch.(!i) 27. done; 28. !result;;

Figura 5.5. Modificaes no cdigo da rvore-B para obteno do limite superior.

5.2.3 A Multirvore-B Intervalar


A Multirvore-B Intervalar um arranjo de mltiplas rvores-B intervalares em camadas. O custo de cada operao na Multirvore-B Intervalar O(log n). Na Figura 5.6, est representada uma Multirvore-B de ordem 4. A rvore da camada zero a rvore-B superior. No exemplo, considerou-se apenas um n, mas pode haver inmeros, dependendo da quantidade de slabs, ou seja, de coordenadas x distintas na malha. As setas partindo da rvore-B superior referem-se aos ponteiros para a rvore-B inferior em que se encontram os segmentos de cada slab. Na proposta deste trabalho, foi definida uma Multirvore-B de ordem 5, por ter apresentado desempenho superior. Na Figura 5.7, pode-se perceber que a rvore-B est contida na estrutura de dados da Multirvore-B.

95

Figura 5.6. Arquitetura global de uma Multirvore-B.

type t_key = { mutable k_coord: float array; mutable k_indice: int } and page_btree = { mutable bt_n: int; mutable bt_key: t_key array; mutable bt_branch: int array } and page_multibtree = { mutable mbt_root: int; mutable mbt_btree: page_btree array; mutable mbt_newp: int; mutable mbt_num_p: int; mutable mbt_elem_count: int };;

Figura 5.7. Estrutura de dados da Multirvore-B em OCaml. O tipo t_key define a estrutura de cada n da rvore-B. Na rvore-B superior, k_coord contm os limites inferior e superior das coordenadas x dos segmentos que definem cada slab, e k_indice aponta para a camada em que est a rvore-B inferior correlata. Na rvoreB inferior, k_coord contm as coordenadas do segmento com as coordenadas do vrtice inicial invertidas, e k_indice refere-se ao identificador do segmento na malha. O tipo page_btree define a estrutura da rvore-B como descrita em (KNUTH, 1998). O tipo page_multibtree define a estrutura da Multirvore-B. O campo mbt_btree um array de rvores-B. Os quatro ltimos campos constituem os parmetros de cada rvore-B: mbt_root indica o n que est na raiz da rvore; mbt_newp uma espcie de ponteiro para o n recm-criado; mbt_num_p um ndice seqencial dos ns criados e mbt_elem_count um contador de elementos vlidos, isto , o somatrio de valores constantes de page_btree.bt_n.

96

5.3 Localizao Planar com Multirvore-B Intervalar


Como mostrado na Figura 5.6, a Multirvore-B Intervalar uma estrutura de dados de composta de mltiplas camadas. Nela, so armazenadas informaes sobre os vrtices inicial e final dos segmentos de um PSLG. Essa organizao em mltiplas camadas importante para o problema da localizao planar de pontos. A camada zero contm uma rvore-B Intervalar que armazena, em ordem crescente, os valores de coordenada x dos vrtices do PLSG. Tal armazenamento permite organizar os segmentos do PSLG em intervalos. Nas rvores-B contidas nas demais camadas, esto armazenados, em ordem crescente, pela coordenadas y, os segmentos (ou pedaos de segmentos) do PSLG. Cada registro da rvore-B Intervalar da camada zero, existe um ponteiro para uma rvore-B Intervalar que contm segmentos com vrtices inicial e final coincidentes com o limite inferior e limite superior do intervalo. A localizao da regio do PSLG em que se encontra um determinado ponto realizada em duas etapas: primeiro pesquisa-se coordenada x do ponto, na camada zero da MultirvoreB Intervalar para definir a rvore-B inferior em que ser feita a segunda pesquisa. Depois, pesquisa-se pela coordenada y do ponto na rvore-B inferior apontada para definir a posio do ponto relativa aos segmentos e finalmente a face do PSLG, que corresponde regio em que se encontra o ponto de consulta. Ambas as pesquisas so intervalares. Ou seja, se em um PLSG no existir vrtice de mesmo valor que o ponto de consulta, deve-se retornar, como resultado da pesquisa, o intervalo em que est o ponto de consulta: tanto em relao ao eixo x quanto em relao ao eixo y dos segmentos do PSLG.

5.3.1 Construo Incremental da Estrutura de Pesquisa baseada em Eventos


Nesta fase, a maior preocupao foi validar o mtodo baseado em eventos apresentado adiante. Para isso, o algoritmo deveria aceitar, incrementalmente, como entrada, cada um dos segmentos de um PSLG qualquer e, dinamicamente, construir uma estrutura de pesquisa utilizando o mtodo das Slabs. O algoritmo seria considerado correto se produzisse a mesma estrutura de pesquisa para cada nova ordem de entrada dos segmentos e indicasse corretamente a regio contendo cada um dos pontos previamente estabelecidos. Considere o PSLG da Figura 5.8. Ele particionado em l linhas verticais, que atravessam cada um de seus sete vrtices, formando, portanto, l-1 slabs. Os limites inferior e superior

97

que definem cada slab so armazenados na rvore-B superior, localizada na camada zero. Para cada slab, definida uma rvore-B inferior a partir da camada um. Cada rvore-B inferior armazena os vrtices inicial e final dos segmentos, com as coordenadas do vrtice inicial invertidas. Quando as coordenadas x do novo segmento no constam da rvore-B superior, criada uma nova rvore-B inferior. Na Figura 5.9, sintetizado o processo de construo da estrutura de pesquisa para a localizao planar de pontos.

Figura 5.8. Subdiviso de um PSLG em slabs.

1. 2. 3. 4. 5.

Para cada novo tringulo T formado pela triangulao de Delaunay faa Armazene os segmentos de T em S Altere a ordem dos vrtices de cada segmento em S, tal que o vrtice inicial seja menor que vrtice final Para i de 1 at 3 faa Verifique a orientao do segmento Si em relao ao centride de T e armazene em Si.LeftFace e em Si.RightFace, conforme o caso, a posio do centride de T relativa ao segmento Si. Insira o segmento Si na fila F Enquanto a fila F no estiver vazia faa Atualize valores de x_max, y_max, coord_min e coord_max Se o registro {coord_min.x, coord_max.x}no estiver na rvore-B Superior ento Inclua registro {coord_min.x, coord_max.x} na rvore-B Superior Inclua-o na rvore-B Inferior (ocorrncia do Evento 1, conforme Figura 5.11) Atualize dados de controle da Multirvore-B Intervalar Seno Verifique o tipo de evento ocorrido (conforme Figura 5.11) Execute os procedimentos referentes ao evento ocorrido Atualize dados de controle da Multirvore-B Intervalar

6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.

Figura 5.9. Algoritmo global do processo de construo da estrutura de pesquisa.

98

O algoritmo constri a estrutura de pesquisa para a localizao planar de pontos medida que a malha construda e admite que os tringulos e os segmentos sejam inseridos em qualquer ordem. No caso do grafo da Figura 5.8, para a insero dos seis tringulos h 6! seqncias diferentes; no caso dos segmentos, h 12! diferentes seqncias de insero. Para contemplar todas as possibilidades, foram apurados 14 tipos de eventos que, depois de normalizados, foram reduzidos a 6 tipos, conforme mostrado na Figura 5.11. O algoritmo no registra a histria da construo incremental de uma triangulao de Delaunay, como ocorre com o algoritmo dinmico apresentado por Berg et al. (BERG, 1997), e discutido no Captulo 1. Quando um tringulo deixa de existir, os dados sobre seus segmentos so removidos da Multirvore-B Intervalar. O critrio para definio do conjunto de eventos da Figura 5.11 foi denominado de mapeamento do espao binrio. Considerada a possibilidade do segmento a ser inserido na estrutura de pesquisa interceptar um outro segmento ou de ser interceptado. Na Figura 5.10, so mostradas as possveis maneiras de segmento se situar em relao a outro segmento. A ocupao dessas regies determinam o modo como um segmento interceptar outro segmento. O caso 5 representa um segmento esprio, contendo uma lacuna, e, por isso, descartado. O caso 0 representa a inexistncia de segmento vizinho ou ausncia de interseo com algum segmento vizinho. No contexto da Figura 5.11, o caso 0 tratado como o Evento 1, em que dois segmentos no se interceptam.

Casos 0 1 2 3 4 5 6 7

Regies do Segmento Direita Central Esquerda

Figura 5.10. Mapeamentos possveis de segmentos no espao binrio. Assim, conhecidas as possveis relaes entre o novo segmento e, no mximo, dois segmentos vizinhos no simultneos, esquerda ou direita, foi obtido o contedo da Figura 5.11. O cdigo de evento que aparece na primeira coluna, aquele que ele tinha antes de um procedimento de normalizao que excluiu os casos redundantes.

99

Evento
1

Descrio do Evento
new_segment_left_endpoint < right_neighbor_left_endpoint && new_segment_right_endpoint < right_neighbor_left_endpoint new_segment_left_endpoint < right_neighbor_left_endpoint && new_segment_right_endpoint < right_neighbor_right_endpoint new_segment_left_endpoint = left_neighbor_left_endpoint && new_segment_right_endpoint = left_neighbor_right_endpoint new_segment_left_endpoint = left_neighbor_left_endpoint && new_segment_right_endpoint > left_neighbor_right_endpoint new_segment_left_endpoint = left_neighbor_left_endpoint && new_segment_right_endpoint < left_neighbor_right_endpoint new_segment_left_endpoint > left_neighbor_left_endpoint && new_segment_right_endpoint > left_neighbor_right_endpoint

Amostra do Evento

Figura 5.11. Eventos significativos entre segmento novo (linha tracejada) e segmento vizinho (linha contnua), retratando as possveis formas de interseo entre eles. Quando um segmento intercepta outro segmento, ocorre um corte vertical sobre a coordenada x do ponto de interseo. Segue adiante a interpretao para cada um dos seis eventos. O Evento 1 retrata o caso em que o novo segmento no corta nenhum segmento e o primeiro a ocupar uma slab. O Evento 3 retrata o caso em que o novo segmento, com base em seu ponto extremo direito, corta outro(s) segmento(s) e cortado pelo ponto extremo esquerdo de outro segmento. O Evento 6 retrata o caso em que o novo segmento no corta nenhum outro segmento, mas ocupa uma slab em que se encontra(m) outro(s) segmento(s) com as mesmas medidas dele para as coordenadas x. O Evento 7 retrata o caso em que o novo segmento cortado pelo ponto extremo direito de outro segmento. O Evento 8 retrata o caso em que o novo segmento corta, com base em seu ponto extremo direito, outro(s) segmento(s), mas no cortado por nenhum segmento. O Evento 9 retrata o caso em que o novo segmento corta, com base em seu ponto extremo esquerdo, outro(s) segmento(s) e cortado pelo ponto extremo direito de outro segmento. Finalmente, foi avaliada a ocorrncia de o novo segmento ter dois segmentos vizinhos simultneos. Isso implicou uma situao mais complexa: a existncia de nove regies distintas, trs para cada um dos segmentos, o vizinho-esquerdo, o novo segmento e o vizinhodireito. Um procedimento automtico de normalizao, que tambm foi escrito em OCaml,

100

excluiu os casos esprios aqueles em cuja representao binria existe a seqncia 101, como o caso 5 da Figura 5.10 e reduziu a amostra de 512 (29) casos (2 estados a 9 regies) para 45 casos (Figura 5.12). Tais casos so, na verdade, manifestaes dos seis tipos de eventos que aparecem na Figura 5.11. A regio sombreada que aparece em cada linha da Figura 5.12 representa cada uma das possibilidades de ocupao de espao pelo novo segmento. Os nmeros 0 e 1 definem a posio do novo segmento no espao binrio, significando, respectivamente, regio no-ocupada e regio ocupada.
Casos 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 Espao ocupado pelo segmento vizinho esquerdo 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 0 0 1 1 0 1 1 0 1 1 1 1 0 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Espao intermedirio 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 Espao ocupado pelo segmento vizinho direito 0 0 0 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 Evento correspondente conforme Figura 5.11 Evento 9 Evento 9 Evento 9 Evento 8 Evento 8 Evento 6 Evento 1 Evento 3 Evento 3 Evento 3 Evento 1 Evento 1 Evento 3 Evento 3 Evento 3 Evento 1 Evento 1 Evento 1 Evento 3 Evento 3 Evento 3 Evento 9 Evento 9 Evento 9 Evento 9 Evento 3 Evento 3 Evento 3 Evento 9 Evento 9 Evento 9 Evento 9 Evento 9 Evento 3 Evento 3 Evento 3 Evento 8 Evento 8 Evento 6 Evento 7 Evento 7 Evento 7 Evento 7 Evento 7 Evento 7

1 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1

Figura 5.12. Relao espacial entre o novo segmento e os segmentos vizinhos. Como o grafo que compe a malha planar, no h sobreposio do novo segmento a quaisquer de seus vizinhos. Quando isso aparentemente sugerido pela Figura 5.12, interprete-se que possuem coordenadas x em comum, mas esto ladeados assimetricamente ou simetricamente, como no exemplo da Figura 5.11.

101

5.3.2 Pr-processamento
Nesta fase, constri-se a estrutura de pesquisa para a malha que estiver sendo processada. A diviso da malha em slabs levada a cabo, incrementalmente, medida que cada novo tringulo criado. Para a identificao exata da face sobre a qual est o ponto consultado, os vrtices de cada novo segmento foram reposicionados de forma a que a coordenada x do vrtice inicial seja menor ou igual coordenada x do vrtice final, como indicado pelas setas nos exemplos da Figura 5.13. Esse modelo de orientao tambm importante para identificar corretamente o evento, ou seja, a vizinhana e o tipo de relao que o novo segmento estabelece com outros segmentos. Desse modo, a subdiviso planar obtida tem o mesmo formato que a subdiviso resultante da aplicao do mtodo de slabs sobre uma malha esttica, j construda.

Figura 5.13. Orientaes dos segmentos de alguns tringulos. Os algoritmos so descritos em pseudocdigo, a partir da Figura 5.14. Em Preprocess (Figura 5.15) e Query (Figura 5.16), k_indice = -1 implica que no houve retorno de valor vlido em pesquisa realizada na Multirvore-B.
Algorithm Prepare Input. A triangle T Output. The triangle T with sorted segments 1. Sort the endpoints of segments by x-coordinate, using the y-coordinate as a secondary key 2. Sort all segments S of T by x-coordinate 3. c centroid of the triangle T 4. for i = 1 to 3 do 5. cp cross_product(S[i].k_coord[0], S[i] .k_coord [1], S[i] .k_coord [2], S[i] .k_coord [3], c) 6. if cp <= 0 then LeftFace[S[i].k_indice] T 7. else RightFace[S[i].k_indice] T 8. if LeftFace[S[i].k_indice] = -1 and RightFace[S[i].k_indice] = -1 then Preprocess(S[i].k_coord)

Figura 5.14. Algoritmo Prepare.

102

Algorithm Preprocess Input. A segment S Output. The interval multibtree as search structure for point location problem 1. Insert S in the queue a_segment /* In event functions which there is intersection subsegments are inserted in queue too */ 2. while queue a_segment not empty do 3. Update y_min and y_max coordinates /* y_min and y_max are used in event functions, as Event1, etc. */ 4. coord_min min_coordinate(a_segment) 5. coord_max max_coordinate(a_segment) 6. Find the node {coord_min.x, coord_max.x} in Upper Btree 7. if exact value found then Event6() 8. else if lower_bound.k_indice <> -1 then 9. if coord_min.x = lower_bound.k_coord[0] and coord_max.x = lower_bound.k_coord[1] then Event7() 10. else if coord_min.x = lower_bound.k_coord[0] and coord_max.x < lower_bound.k_coord[1] then Event8() 11. else if coord_min.x = lower_bound.k_coord[1] and coord_max.x > lower_bound.k_coord[1] or 12. coord_min.x > lower_bound.k_coord[1] and coord_max.x > lower_bound.k_coord[1] then Event1() 13. else if coord_min.x > lower_bound.k_coord[0] and coord_max.x > lower_bound.k_coord[1] or 14. coord_min.x > lower_bound.k_coord[0] and coord_max.x = lower_bound.k_coord[1] or 15. coord_min.x > lower_bound.k_coord[0] and coord_max.x < lower_bound.k_coord[1] then Event9() 16. else if lower_bound.k_indice <> -1 and upper_bound.k_indice <> -1 then 17. if lower_bound.tk_coord = upper_bound.tk_coord then 18. if coord_min.x < upper_bound.k_coord[0] and coord_max.x < upper_bound.k_coord[0] or 19. coord_min.x < upper_bound.k_coord[0] and coord_max.x = upper_bound.k_coord[0] then Event1() 20. coord_min.x < upper_bound.k_coord[0] and coord_max.x < upper_bound.k_coord[1] or 21. coord_min.x < upper_bound.k_coord[0] and coord_max.x = upper_bound.k_coord[1] or 22. coord_min.x < upper_bound.k_coord[0] and coord_max.x > upper_bound.k_coord[1] then Event3() 23. else if coord_min.x = upper_bound.k_coord[0] and coord_max.x < upper_bound.k_coord[1] then Event8() 24. else if lower_bound.tk_coord < upper_bound.tk_coord then 25. if coord_min.x >= lower_bound.k_coord[1] and coord_max.x <= upper_bound.k_coord[0] then Event1() 26. else if coord_min.x = lower_bound.k_coord[0] and coord_max.x < lower_bound.k_coord[1] or 27. coord_min.x = upper_bound.k_coord[0] and coord_max.x < upper_bound.k_coord[1] then Event8() 28. else /* The tests continue according to Figure 6.11 */ 29. ... 30. else Event1()

Figura 5.15. Algoritmo Preprocess.

5.3.3 Consulta de Pontos


Dado um ponto de consulta Q, efetuam-se duas pesquisas na Multirvore-B Intervalar. A primeira pesquisa, tendo como argumento a coordenada x de Q, ocorre na rvore-B Superior e seleciona uma das rvores-B inferiores. A segunda pesquisa procura, na rvore-B Inferior selecionada, segmento com coordenada y igual ou mais prxima coordenada y de Q. Como todas as rvores-B so de ordem 5, o nmero de comparaes para cada pesquisa O(log5 n). Ao final, um teste de orientao, fundamentado em produto misto, define o segmento de referncia para identificao da face do PSLG em que se encontra o ponto de consulta Q. O algoritmo em pseudocdigo descrito a seguir na Figura 5.16.

103

Algorithm Query Q Input. A query point Q Output. The face number which the point Q lie in or returns 1 if point lies outside the mesh 1. Get parameters of the Upper Btree 2. if Upper Btree not empty then 3. Find node in format of {Q[0], 0.0}in Upper Btree 4. if lower_bound.k_indice <> -1 and upper_bound.k_indice <> -1 then 5. if lower_bound.tk_coord = upper_bound.tk_coord then slab upper_bound.k_indice 6. else if lower_bound.k_coord < upper_bound.k_coord then 7. if Q[0] > lower_bound.k_coord[0] and Q[0] < lower_bound.k_coord[1] then slab lower_bound.k_indice 8. else if upper_bound.k_coord[0] <> upper_bound.k_coord[1] then slab upper_bound.k_indice 9. else slab lower_bound.k_indice 10. else if lower_bound.k_coord > upper_bound.k_coord then slab upper_bound.k_indice 11. else if lower_bound.k_indice <> -1 then slab upper_bound.k_indice 12. Get parameters of the Lower Btree 13. Find node in format of {Q[1], 0.0, 0.0, 0.0}in Lower Btree 14. Segment.k_indice -1 15. if exact value found then Segment exact value 16. else if lower_bound.k_indice <> -1 and upper_bound.k_indice <> -1 then 17. if lower_bound.k_coord = upper_bound.k_coord then 18. Segment upper_bound 19. else if lower_bound.k_coord < upper_bound.k_coord then 20. cp_lower_bound cross_product ({lower_bound.k_coord[1], lower_bound.k_coord[0]}, {lower_bound.k_coord[2], lower_bound.k_coord[3]}, Q) 21. cp_upper_bound cross_product ({upper_bound.k_coord[1], upper_bound.k_coord[0]}, {upper_bound.k_coord[2], upper_bound.k_coord[3]}, Q) 22. if cp_lower_bound <= 0.0 && cp_upper_bound > 0.0 then Segment lower_bound 23. else if cp_lower_bound <= 0.0 then Segment lower_bound 24. else Segment upper_bound 25. else if lower_bound.k_coord > upper_bound.k_coord then Segment upper_bound 26. else if lower_bound.k_indice <> -1 then Segment lower_bound 27. else if upper_bound.k_indice then Segment ( upper_bound 28. cp ( cross_product({Segment.k_coord[1], Segment.k_coord[0]}, {Segment.k_coord[2], Segment.k_coord[3]}, Q) 29. if cp <= 0.0 then 30. if RightFace[Segment.k_indice] <> -1 then 31. return RightFace[Segment.k_indice] 32. else return LeftFace[Segment.k_indice] 33. else if LeftFace[Segment.k_indice] <> -1 then 34. return LeftFace[Segment.k_indice] 35. else return RightFace[Segment.k_indice] 36. else return (-1)

Figura 5.16. Algoritmo Query.

5.4 Experimentos Computacionais


Os algoritmos foram implementados em OCaml, e os experimentos foram executados no modo interativo da linguagem, utilizando um PC com processador Pentium 4 de 2.8 GHz, 496 Mb de memria RAM e 256 Kb de memria Cache, sob o sistema operacional Windows. O algoritmo de localizao planar de pontos aceita, como entrada, qualquer tipo de malha. Preferiram-se malhas no-estruturadas construdas pelo gerador de malhas escrito em OCaml, a partir do algoritmo de Labelle (LABELLE; SHEWCHUK, 2003).

104

Nos experimentos, foram utilizados os domnios geomtricos da Figura 5.17, cada um com malha de 250, 500, 1.000, 2.000 e 4.000 vrtices, aps a insero dos pontos de Steiner. Em todos os testes, o ponto de consulta foi o centride de cada tringulo da malha, o qual foi previamente calculado e armazenado (Figura 5.14, linha 3) em um array. A exatido dos resultados de localizao do ponto de consulta, tanto com o uso de fora bruta quanto com o de Multirvore-B Intervalar, foi comprovada por um procedimento computacional. Nesse procedimento, para cada valor de centride do array, efetuavam-se alternadamente consultas seqencial e binria e se verificava se os resultados eram equivalentes. No houve qualquer divergncia. Utilizou-se uma Multirvore-B de ordem 5, por ter-se mostrado mais eficiente. Os resultados so apresentados nas Tabelas 5.1 a 5.5. Os custos com pr-processamento e espao de armazenamento no se aplicam ao mtodo da fora bruta, pois, na prtica, eles no so requeridos: a localizao planar de pontos acontece diretamente na malha.

a) Crculo

b) Chave c) Letra A d) Guitarra eltrica Figura 5.17. Tipos de entradas para os experimentos.

e) Lago Superior

Tabela 5.1. Resultados de Testes de Localizao de Pontos na Malha do Crculo.


Informaes da malha Tempo (em segundos) Espao (em nmero de elementos) Vrtices Pesquisa M. M. rvore- M. rvorePr-procesPesquisa (originais + Tringulos samento Total Fora Bruta rvore-B B Intervalar B Intervalar P. Steiner) Intervalar Superior Inferior 250 448 0.60 246 7.788 8.034 0.21 0.00 500 924 2.36 496 22.382 22.878 0.99 0.00 1.000 1.901 11.15 996 62.924 63.920 4.84 0.05 2.000 3.833 63.61 1.984 175.670 177.654 23.12 0.11 4.000 7.796 540.69 3.984 507.390 511.374 105.51 0.33

Tabela 5.2. Resultados de Testes de Localizao de Pontos na Malha da Chave.


Informaes da malha Tempo (em segundos) Espao (em nmero de elementos) Vrtices Pesquisa M. M. rvore- M. rvorePr-procesPesquisa (originais + Tringulos samento Total Fora Bruta rvore-B B Intervalar B Intervalar P. Steiner) Intervalar Superior Inferior 250 406 0.72 190 8.079 8.269 0.22 0.00 500 861 5.16 418 26.350 26.768 0.88 0.05 1.000 1.802 33.17 889 81.251 82.140 4.39 0.06 2.000 3.721 231.67 1.835 238.778 240.613 20.81 0.11 4.000 7.620 2667.57 3.795 701.639 705.434 97.66 0.33

105

Tabela 5.3. Resultados de Testes de Localizao de Pontos na Malha da Letra A.


Informaes da malha Tempo (em segundos) Espao (em nmero de elementos) Vrtices Pesquisa M. M. rvore- M. rvorePr-procesPesquisa (originais + Tringulos samento Total Fora Bruta rvore-B B Intervalar B Intervalar P. Steiner) Intervalar Superior Inferior 250 365 0.27 245 4.851 5.096 0.16 0.00 500 797 1.15 494 14.470 14.964 0.71 0.00 1.000 1.690 4.56 982 40.090 41.072 3.84 0.05 2.000 3.581 21.03 1.969 115.033 117.002 19.72 0.11 4.000 7.347 124.29 3.946 326.398 330.344 92.77 0.27

Tabela 5.4. Resultados de Testes de Localizao de Pontos na Malha da Guitarra eltrica.


Informaes da malha Tempo (em segundos) Espao (em nmero de elementos) Vrtices Pesquisa M. M. rvore- M. rvorePr-procesPesquisa (originais + Tringulos samento Total Fora Bruta rvore-B B Intervalar B Intervalar P. Steiner) Intervalar Superior Inferior 250 332 0.11 179 2.615 2.794 0.11 0.00 500 793 0.66 419 10.132 10.551 0.77 0.00 1.000 1.695 2.91 897 31.545 32.442 4.29 0.05 2.000 3.587 17.69 1.872 95.559 97.431 19.88 0.11 4.000 7.437 79.64 3.832 284.033 287.865 98.70 0.33

Tabela 5.5. Resultados de Testes de Localizao de Pontos na Malha do Lago Superior.


Informaes da malha Tempo (em segundos) Espao (em nmero de elementos) Vrtices Pesquisa M. M. rvore- M. rvorePr-procesPesquisa (originais + Tringulos samento Total Fora Bruta rvore-B B Intervalar B Intervalar P. Steiner) Intervalar Superior Inferior 250 *** *** *** *** *** *** *** 500 *** *** *** *** *** *** *** 1.000 1.465 3.57 910 30.389 31.299 2.74 0.05 2.000 3.458 19.61 1.901 102.154 104.055 19.72 0.11 4.000 7.440 119.30 3.900 312.150 316.050 98.42 0.33

*** Testes no executados em razo de o total de vrtices da malha ser inferior quantidade (518) de vrtices originais que formam a fronteira do PSLG.

Foram realizados testes com nmero maior de pontos, e o tempo de pesquisa na Multirvore-B Intervalar pareceu ter crescimento linear. Por isso, considera-se importante substituir futuramente seu ncleo por outros tipos de rvores balanceadas, conforme sugerido no Captulo 6. O procedimento mais exaustivo do algoritmo de localizao planar de pontos apresentado o que trata a situao de o novo segmento cortar mltiplos segmentos j armazenados na rvore-B inferior. Nesse caso, executam-se operaes de deletar, cortar verticalmente e reincluir cada um deles na rvore-B inferior. Sobre os resultados, os experimentos com os PSLG da Chave e Crculo foram os que apresentaram o pior desempenho na fase de pr-processamento. Isso se deu em virtude de sua altura considervel. Em PSLG com tal caracterstica, o novo segmento pode cortar

106

verticalmente uma grande quantidade de segmentos contidos na rvore-B inferior. Isso demonstra que o desempenho da fase de pr-processamento influenciado pela geometria do domnio que estiver sendo computado. Dessa forma, a introduo de um teste simples no algoritmo para girar a figura que tiver a altura maior que a largura pode melhorar o desempenho do pr-processamento. Na Tabela 5.6, apresentada a distribuio dos eventos durante o pr-processamento de cada PSLG. O Crculo e a Chave produziram o maior nmero de eventos, ou seja, seus segmentos sofreram mais cortes que os segmentos dos demais domnios geomtricos. O Lago Superior com 4.000 vrtices que, mesmo tendo quase a mesma quantidade de eventos que a Chave com 2.000 vrtices, apresentou melhor desempenho, comparvel ao da Guitarra Eltrica e da Letra "A". Tabela 5.6. Distribuio de eventos identificados na fase de pr-processamento.
PSLG Vrtices Evento 1 Evento 3 Evento 6 Evento 7 Evento 8 Evento 9 Crculo 2.000 1.944 40 59.362 457.528 1.246 669 Chave 2.000 1.892 35 78.402 837.508 1.156 603 Letra A 2.000 1.927 52 40.612 237.972 1.222 639 Guitarra eltrica 2.000 1.826 82 32.271 167.316 1.134 612 Lago Superior 2.000 1.858 60 36.415 194.467 1.154 611 Lago Superior 4.000 3.830 87 109.037 800.700 2.447 1.286 Total 520.789 919.596 282.424 203.241 234.565 917.387

Captulo VI

Concluses
No Captulo 2, foi destacado o problema da localizao planar de pontos, um problema aberto introduo de tcnicas e estruturas de dados avanadas, para o qual ser apresentada neste trabalho uma soluo fundamentada em uma rvore balanceada intervalar. Como mostrado no Captulo 3, a instabilidade numrica do programa em C de (LEACH, 1992) para expressar com alta preciso nmeros na representao ponto-flutuante provocou divergncias nos resultados da triangulao do crculo e da boca. Isso ocorreu porque, com freqncia, algoritmos que tomam deciso baseada em testes geomtricos falham quando os testes produzem respostas falsas provocadas por erro de arredondamento. Uma soluo para esse problema de robustez usar tcnicas de aritmtica exata como as descritas em (SHEWCHUK, 1996a). Por outro lado, elas so muito morosas e podem reduzir a velocidade da aplicao em at dez vezes, se no forem usadas tcnicas adaptativas, propostas em (SHEWCHUK, 1997). Contudo, mesmo sem estar aparelhada com tcnicas de computao robusta, a verso em OCaml mostrou-se numericamente mais estvel, posto que menos eficiente que a verso em C. Como se optou por no utilizar o estilo funcional na implementao de cdigos em OCaml. Restou uma questo a ser respondida: que benefcios o estilo de programao funcional trar? Melhorar o tempo de resposta, o qual no foi bom, tanto na implementao do algoritmo de Triangulao de Delaunay quanto na implementao do gerador de malhas? O gerador de malhas Mesh, desenvolvido por Labelle (LABELLE; SHEWCHUK, 2003) produz malhas de boa qualidade. Entretanto, o tempo que despende para computar a triangulao de Delaunay e localizao planar de pontos torna-o proibitivo para processar malhas com elevada quantidade de elementos. Com a melhoria de sua complexidade temporal para O(n log n), Mesh poder ser efetivamente utilizado em pr-processadores de elementos finitos, incluindo aplicaes as mais diversas, como: diagnstico mdico, geologia, fsica, engenharias eltrica, civil, mecnica e qumica. A implementao de Triangle, hoje largamente empregado em simulaes numricas em face de sua velocidade e preciso, no seria to proveitosa quanto o foi a de Mesh. Por outro

108

lado, a prolixidade do cdigo de Triangle induziu-nos a conduzir a pesquisa como descrito adiante. Primeiro, foi implementado o algoritmo de triangulao de Delaunay por diviso-econquista de Guibas-Stolfi e descobriu-se que OCaml numericamente mais robusta que C, sendo, portanto, recomendada para tratar problemas geomtricos que requerem exatido. Segundo, a experincia obtida na implementao do algoritmo de Guibas-Stolfi foi determinante para o sucesso da codificao de OCamlMesh. Terceiro, a descoberta de fraquezas potenciais de Mesh fez com que neste trabalho fosse tratado o problema de localizao planar de pontos usando a Multirvore-B Intervalar como estrutura de pesquisa. A partir do captulo seguinte, discute-se sobre tcnicas de localizao planar de pontos utilizando a mencionada rvore balanceada. A Multirvore-B Intervalar demonstrou ser uma estrutura de pesquisa relativamente eficiente para o problema da localizao planar de pontos. O baixo desempenho do prprocessamento no decorre de qualquer peculiaridade arquitetural ou algortmica da estrutura de pesquisa, mas do mtodo de subdiviso utilizado, baseado em slabs. Em experimentos adicionais, constatou-se que a insero de segmentos nas correspondentes slabs, sem explicitamente cort-los, reduz, quase quadraticamente, o tempo de pr-processamento. Para tanto, o clculo da interseo passa a ser feito na consulta de pontos, durante o percurso nas camadas inferiores da Multirvore-B Intervalar, com pouco impacto sobre o tempo de pesquisa. Como trabalho futuro, acredita-se que a substituio do mtodo de subdiviso em slabs por outro mtodo de menor ordem assinttica prover ainda melhores resultados quanto aos requisitos de espao e tempo de pr-processamento. No desenvolvimento do trabalho, foi interessante perscrutar a infra-estrutura da malha, porque chamou a ateno para o problema da localizao planar de pontos dinmica. A Multirvore-B Intervalar, um dos subprodutos da soluo apresentada para o mencionado problema, teve bom desempenho nas consultas de localizao planar de pontos. Entretanto, seria interessante implementar essa estrutura de rvores em camadas utilizando outros tipos rvores balanceadas, como: rvore 2-3-4, rvore Red-black, rvore Kd-tree e rvore AVL.

109

6.1 Trabalhos Futuros


No texto da tese, algumas questes deixaram de ser tratadas. Algumas que surgiram em um estgio avanado da pesquisa; outras que no figuravam como objeto principal de interesse. Cada uma das questes segue adiante como sugestes para futuros trabalhos. A primeira das questes o emprego do estilo de programao funcional para toda implementao em OCaml, que poder tornar o cdigo mais eficiente independentemente do algoritmo que estiver sendo implementado. Uma questo importante a efetuao de experimentos de localizao planar de pontos comparando o desempenho da Multirvore-B Intervalar com outros tipos de rvores balanceadas, como rvore 2-3-4, rvore Red-black, rvore Kd-tree e rvore AVL, todas organizadas em camadas e incrementadas com mecanismo de pesquisa intervalar. Outra questo bastante significativa o desenvolvimento de tcnica de subdiviso do espao de ordem assinttica melhor que a do mtodo das Slabs para minimizar o tempo de pr-processamento no algoritmo dinmico de localizao planar de pontos. Outra questo, cuja avaliao foi positiva, a paralelizao dos procedimentos de triangulao de Delaunay e da gerao de malhas para melhoria de desempenho. Uma questo final a construo de ferramenta de MEF totalmente em OCaml, incluindo, a exemplo do programa escrito por David Meeker (MEEKER, 2003), recursos e editor grficos para modelar domnios geomtricos bidimensionais e tambm tridimensionais, bem como cobertura s etapas de processamento e ps-processamento.

110

Referncias Bibliogrficas
BERG, MARK DE et al. Computational Geometry: Algorithms and Applications. 2. ed. Berlin: Springer, 1997.367 p. BERN, MARSHAL. Adaptive Mesh Generation. Error Estimation and Adaptive Discretization Methods in Computational Fluid Dynamics, T. Barth; H. Deconinck (editores), Springer-Verlag, Heidelberg, 2002, pginas 1-46. BERN, MARSHAL. DEPARTMENT OF INFORMATION AND COMPUTER SCIENCE, UNIVERSITY OF CALIFORNIA Faster Circle Packing with Application to Nonobtuse Triangulation. Irvine, 1994. 7p. Relatrio Tcnico 94-33. BERN, MARSHAL; EPPSTEIN, DAVID. Mesh Generation and Optimal Triangulation. Computing in Euclidean Geometry, Ding-Zhun Du; Frank Hwang, editores, Lecture Notes Series on Computing. World Scientific. Singapore, v. 1, p. 23-90, 1992. BERN, MARSHAL; EPPSTEIN, DAVID. Quadrilateral Meshing by Circle Packing. In: SIXTH INTERNATIONAL MESHING ROUNDTABLE, 1997, Park City, p. 7-19. BERN, MARSHAL; EPPSTEIN, DAVID; GILBERT, JOHN R. Provably Good Mesh Generation. Journal of Computer and System Sciences. [s.l.], vol. 48, n. 3, p. 384-409, jun. 1994. BERN, MARSHAL; MITCHELL, SCOTT; RUPPERT, J. Linear-size Nonobtuse Triangulation of Polygons. In: PROC. 10TH SYMP. COMP. GEOM, 1994. Anais da ACM, 1994. p. 221-230. BERN, MARSHAL; PLASSMAN, P. Mesh Generation. Handbook of Computational Geometry. 1 ed. [s.l.]: North-Holland, 2000.38 p. CHEN, MIN-BIN; CHUANG, TYNG-RUEY; WU, JAN-JAN. "A Parallel Divide-andConquer Scheme for Delaunay Triangulation. In: 9TH INTERNATIONAL CONFERENCE ON PARALLEL AND DISTRIBUTED SYSTEMS, pgs. 571-576, IEEE Computer Society Press, Chungli, Taiwan, Dezembro 2002. CHERNIKOV, ANDREY; CHRISOCHOIDES; NIKOS. Parallel 2D Constrained Delaunay Mesh Generation. ACM Transactions on Mathematical Software, em reviso, 2006. CHEW, L. PAUL. DEPARTAMENT OF COMPUTER SCIENCE, CORNELL UNIVERSITY. Guaranteed-Quality Triangular Meshes. Ithaca, 1989. 18p. Relatrio Tcnico 89-983. DIVERIO, TIARAJ ASMUZ. Teoria da Computao: Mquinas Universais e Computabilidade. 1. ed. Porto Alegre: Editora Sagra Luzzatto, 1999.205 p. DWYER, REX A. A Simple Divide-and-Conquer Algorithm for Computing Delaunay Triangulations in O(n log log n) Expected Time. In: SYMPOSIUM ON COMPUTATIONAL GEOMETRY, 1986. p. 276-284.

111

EDAHIRO, MASATO; KOKUBO, IWAO; ASANO, TAKAO. A New Point Location Algorithm and Its Practical Efficiency Comparison with Existing Algorithms. ACM Transactions on Graphics. [s.l.], v. 3, n. 2, p. 86-109, abr. 1984. FIGUEIREDO, L. H. de; CARVALHO, P. C. P. Introduo Geometria Computacional. In: XVII COLQUIO BRASILEIRO DE MATEMTICA, IMPA, 1991. GUIBAS, LEONIDAS J.; STOLFI, JORGE. Primitives for the Manipulation of General Subdivisions and the Computation of Voronoi Diagrams. ACM Transactions on Graphics. [s.l.], vol. 4, n. 2, p. 74-123, abr. 1985. HARDWICK, JONATHAN C. Implementation and Evaluation of an Efficient 2d Parallel Delaunay Triangulation Algorithm. In: PROCEEDINGS OF THE 9TH ANNUAL ACM SYMPOSIUM ON PARALLEL ALGORITHMS AND ARCHITECTURES, ACM, Vol 15, Junho 1997. INRIA. Pointers in OCaml. INRIA, 2000, Disponvel <http://caml.inria.fr/resources/doc/guides/pointers.en.html>. Acesso em: 5 abr. 2004. em:

JOE, B. GEOMPACK A Software Package for the Generation of Meshes Using Geometric Algorithms. Advances in Engineering Software. [s.l.], v. 56, n. 13, p. 325-331, 1991. KALLMANN, M.; BIERI, H.; THALMANN, D. Fully Dynamic Constrained Delaunay Triangulations, In: GEOMETRIC MODELLING FOR SCIENTIFIC VISUALIZATION, Heidelberg, Germany, G. Brunnett, B. Hamann, H. Mueller (Editores), ISBN 3-540-40116-4, Springer-Verlag, Heidelberg, Germany, pp. 241-257, 2003. KARAMETE, B. KAAN. Mesh2d, Scientific Computational Research Center, SCOREC. Disponvel em: <http://home.nycap.rr.com/kaan/>. Acesso em: 8 jul. 2005. KNUTH, DONALD ERVIN. The Art of Computer Programming: Sorting and Searching. 2. ed. USA: Addison Wesley, 1998.780 p. KOHOUT, JOSEF. DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, UNIVERSITY OF WEST BOHEMIA IN PILSEN. Delaunay Triangulation in Parallel and Distributed Environment. Pilsen, Czech Republic, 2004, 101p. Relatrio Tcnico DCSE/TR2004-02. KOHOUT, JOSEF. Delaunay Triangulation in Parallel and Distributed Environment, 2004, 73 f. Tese (Doutorado em Cincia da Computao) University of West Bohemia in Pilsen, Department of Computer Science and Engineering, Univerzitni 8, 30614 Pilsen, Czech Republic, Maro, 2004. LABELLE, FRANCOIS; SHEWCHUK, J. R. Anisotropic Voronoi Diagrams and GuaranteedQuality Anisotropic Mesh Generation. In: PROCEEDINGS OF THE 19TH ACM SYMPOSIUM ON COMPUTATIONAL GEOMETRY, 8-10 de Junho, 2003, San Diego, CA, USA. Anais da ACM, 2003.

112

LEACH, GEOFF. Department of Computer Science, Royal Melbourne Institute of Technology. Improving Worst-Case Optimal Delaunay Triangulation Algorithms. Melbourne, 1992. 7p. Manuscrito no publicado. LEE, S.; PARK, C.; PARK, C. An improved parallel algorithm for delaunay triangulation on distributed memory parallel computers. Parallel Processing Letters, 11:341--352, 2001. LEROY, Xavier. The Objective Caml System. INRIA. <http://pauillac.inria.fr/ocaml/>. Acesso em: 13 mar. 2003. 1996. Disponvel em

LIN, HSUAN-CHENG. Javamesh - A Two Dimensional Triangular Mesh Generator for Finite Elements, 1997, 158 f. Dissertao (Mestrado em Engenharia Civil) University of Pittsburgh, Pittsburgh. MEEKER, DAVID. Finite Element Method Magnetics. Disponvel em: <http://femm.fostermiller.net/>. Acesso em: 12 mar. 2003. MERRIAM, MARSHAL L. NASA, AMES RESEARCH CENTER, Parallel Implementation of an Algorithm for Delaunay Triangulation, Moffett Field, California, 1992. 14p. Memorando Tcnico 103951. MESHING SOFTWARE SURVEY. Meshing Research Corner. Carnegie Mellon University. Disponvel em: <www.andrew.cmu.edu/user/sowen/software/triangle.html>. Acesso em: 5 jul. 2005. MOORE, DOUGLAS WILLIAM. Simplical Mesh Generation with Applications, 1992, 116 f. Tese (Doutorado em Cincia da Computao) Faculty of the Graduate School of Cornell University, Ithaca. MOUNT, DAVID M. DEPARTAMENT OF COMPUTER SCIENCE, UNIVERSITY OF MARYLAND. Computational Geometry. Maryland, 2002. 122p. Lecture Notes. MOURA, ANDR LUIZ; CAMACHO, JOS ROBERTO; GUIMARES JR., SEBASTIO CAMARGO; SALERNO, CARLOS HENRIQUE. A functional language to implement the divide-and-conquer Delaunay triangulation algorithm. Applied Mathematics and Computation, Elsevier, The Netherlands, v. 168, n. 1, p. 178-191, 2005. MOURA, ANDR LUIZ; CAMACHO, JOS ROBERTO; GUIMARES JR, SEBASTIO CAMARGO. Localizao Planar de Pontos Dinmica baseada em Eventos sobre Slabs. In: PROCEEDINGS DO 7 CBMAG CONGRESSO BRASILEIRO DE ELETROMAGNETISMO, 7-10 de Agosto de 2006, Belo Horizonte. Anais do Momag2006, Belo Horizonte, UFMG, 2006. MUCKE, E; SAIAS, I.; SHU, B. Fast Randomized Point Location without Preprocessing in two- and three-dimensional Delaunay Triangulations. In: PROC. 12TH ACM SYMPOSIUM ON COMPUTATIONAL GEOMETRY, 1996. p. 274-283. NICENO, BOJAN. EasyMesh. University of Trieste, D.I.N.M.A. Disponvel em <http://www-dinma.univ.trieste.it/~nirftc/research/easymesh/>. Acesso em: 17 jul. 2005.

113

OROURKE, JOSEPH. Computational Geometry in C. 2. ed. USA: Cambridge University Press, 1998.376 p. PAOLINI, MAURIZIO. TMG (Triangular Mesh Generator). Istituto di Analisi Numerica (CNR) of Pavia, Dipartimento di Matematica, University of Milano. Disponvel em: http://www.dmf.bs.unicatt.it/~paolini/tmg/. Acesso em 4 abr. 2004. REMACLE, JEAN-FRANOIS. GMSH. Ecole Polytechnique de Montreal & University of Liege. Liege. Disponvel em: <http://www.meca.polymtl.ca/~remacle/Mesh.html>. Acesso em: 6 jul. 2005. RUPPERT, J. A Delaunay Refinement Algorithm for Quality 2Dimensional Mesh Generation. Journal of Algorithms. [s.l.], vol. 18, n. 3, p. 548-585, mai. 1995. SEDGEWICK, ROBERT. Algorithms in C. 3. ed. [s.l.]: Addison-Wesley Publishing Company, Inc., 1998. SHEWCHUK, J. R. Robust Adaptive Floating-Point Geometric Predicates. In: PROCEEDING OF THE TWELFTH ANNUAL SYMPOSIUM ON COMPUTATION GEOMETRY, Maio de 1996. Anais da Association for Computing Machinery, 1996. SHEWCHUK, J. R. Triangle: Engineering a 2D Quality Mesh Generator and Delaunay Triangulation. In: FIRST WORKSHOP ON APPLIED COMPUTATIONAL GEOMETRY, Maio de 1996, Philadelphia, Pennsylvania. Anais da ACM, 1996. p. 124-133. SHEWCHUK, J. R. Delaunay Refinement Mesh Generation, 1997, 207 f. Tese (Doutorado em Cincia da Computao) School of Computer Science, Computer Science Department, Carnegie Mellon University, Pittsburgh. SHEWCHUK, J. R. DEPARTMENT OF ELECTRICAL ENGINEERING AND COMPUTER SCIENCE, UNIVERSITY OF CALIFORNIA AT BERKELEY. Delaunay Mesh Generation. Berkeley, 1999, 115p. Lecture Notes. SHEWCHUK, J. R. DEPARTMENT OF ELECTRICAL ENGINEERING AND COMPUTER SCIENCES, UNIVERSITY OF CALIFORNIA AT BERKELEY. What is a Good Linear Finite Element? Interpolation, Conditioning, Anisotropy, and Quality Measures. Berkeley, 2002. 66p. Relatrio Tcnico. SLEATOR, DANIEL DOMINIC; TARJAN, ROBERT ENDRE. Self-Adjusting Binary Search Trees. Journal of the Association for Computing Machinery. [s.l.], v. 32, n. 3, p. 652-686, jul. 1985. SU, PETER. Efficient Parallel Algorithms for Closest Point Problems, 1994, 138 f. Tese (Doutorado em Cincia da Computao) Dartmouth College, Hanover. SU, PETER; DRYSDALE, ROBERT L. SCOT. A Comparison of Sequential Delaunay Triangulation Algorithms. In: PROCEEDINGS OF THE ELEVENTH ANNUAL SYMPOSIUM ON COMPUTATIONAL GEOMETRY, junho de 1995, Vancouver, British Columbia, Canada. Anais da Association for Computing Machinery, 1995. p. 61-70.

114

TENG, SHANG-HUA. Unstructured Mesh Generation: Theory, Practice, and Perspective. International Journal of Computational Geometry & Applications. [s.l.], World Scientific Publishing Company, jan. 1999. THE COMPUTER LANGUAGE SHOOTOUT BENCHMARKS, 2006. Disponvel em: <http://shootout.alioth.debian.org/>. Acesso em: 25 abr. 2006. WALKER, ROBERT J.; SNOEYNK, JACK. DEPARTMENT OF COMPUTER SCIENCE, UNIVERSITY OF BRITISH COLUMBIA. Practical Point-in-Polygon Tests Using CSG Representations of Polygons. Vancouver, Canada, 1999. 10p. Relatrio Tcnico TR-99-12.

Você também pode gostar