A Biblioteca de Geometria Computacional CGAL

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

TIPOS ABSTRATOS DE DADOS
Gustavo Sant´Anna Ferreira Rodrigo Ribeiro de Souza
Geometria Computacional Galeria de Arte
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 04 Aquiles Burlamaqui UERN
Listas encadeadas Prof. Rosana Palazon.
Algoritmos de manipulação de estruturas elementares de dados
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
Programação Orientada aos Objectos Paulo Marques Departamento de Eng. Informática Universidade de Coimbra Out/2005 Core C++: Uma abordagem.
TADS – Tipos Abstratos de Dados
Introdução à Informática
Geometria Computacional Triangulações
Introdução à Computação Gráfica Recorte
2002 LCG/UFRJ. All rights reserved. 1 Tópicos em C++ Claudio Esperança Paulo Roma Cavalcanti.
2002 LCG/UFRJ. All rights reserved. 1 Programação Linear Claudio Esperança Paulo Roma.
Geometria Computacional Fecho Convexo
2002 LCG/UFRJ. All rights reserved. 1 Localização no Plano Claudio Esperança Paulo Roma.
Geração de Malhas Tetraedrais Restritas
Tiago Salmito SystemC Tiago Salmito
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Rafael Pinto Frederico Corrêa
WAR STORY Stripping Triangulations Luciana Oliveira e Silva
Ronaldo Celso Messias Correia –
Computação Gráfica: Aula2: Curvas e Superfícies
7 Abstração Genérica Unidades genéricas e instanciação.
Curso de Programação em C++
Análise e Projeto de Sistemas
Curso de C/C++ Avançado
Matrizes clássicas e vectores em C++
Aula 12 Biblioteca padrão do C++ O que é? Composição
Listas Encadeadas.
COS242 – Teoria dos Grafos Trabalho Prático – Parte 2
Listas Simplesmente Encadeadas
Análise de Redes Complexas – Conceitos e Propriedades Básicas
Sphere CDV Fundamentals of Spherical Parameterization for 3D Meshes MOTIVAÇÕES: - Remeshing - Morphing.
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
Operações em uma subdivisão planar 2D
Alunos: Bruno Tourinho Tomas Jonathan Augusto da Silva.
Alunos: Bruno Tourinho Tomas Jonathan Augusto da Silva.
Exercícios PAA- Grafos
Bancos de Dados Espaciais
Construção de Algoritmos AULA 04
E NHANCED S ELF -O RGANIZING I NCREMENTAL N EURAL N ETWORK FOR O NLINE U NSUPERVISED L EARNING Cesar Lima José Francisco Maíra Nascimento.
Tipos Abstratos de Dados
+ Curso de C/C++ Aula 10 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Técnicas de Modelagem para Aplicações em Computação Gráfica
Procedural vs. OO (Figuras Geométricas: Área do triângulo)
Ambiente de Execução - Rotinas
Estruturas de Dados Aula 11: TAD Pilha
Desenvolvimento de Jogos e Entretenimento Digital Oficina temática: Algoritmos e Programação Orientação a Objetos: herança Professor: Sandro Rigo.
Árvore Binária de Busca
Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Estruturas de Dados Aula 17: Estruturas Genéricas
Análise de Redes Complexas – Conceitos e Propriedades Básicas
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Geometria Computacional
Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
RUP - Cap. 3 – Processo Dirigido por Caso de Uso
Módulo de visualização de modelos numéricos de superfície da estação fotogramétrica digital E-Foto (MV3D) Rodrigo Machado Alvarenga.
Geometria Computacional Fecho Convexo
Geometria Computacional Prof. Walter Mascarenhas Segundo semestre de 2004.
Geometria Computacional Prof. Walter Mascarenhas Segundo semestre de 2004 Aula 5.
“O homem é um animal utilizador de ferramentas... Sem ferramentas ele não é nada, com ferramentas ele é tudo”. Thomas Carlyle.
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Tipos Compostos Heterogêneos e Tipos Abstratos de Dados
Introdução à Computação Gráfica Rasterização
Transcrição da apresentação:

A Biblioteca de Geometria Computacional CGAL Equipe: Paulo Roma Cavalcanti Claudio Esperança Flavio Nascimento Yalmar Ponce Atencio 25 de março de 2017

Roteiro O projeto CGAL Estrutura do CGAL Conceito de Kernel Robustez numérica Biblioteca básica Flexibilidade Triangulações Representação geométrica Projeto de software Exemplos 25 de março de 2017

O Projeto CGAL 25 de março de 2017

Objetivo Programação robusta Multiplataforma Aplicações Industriais 25 de março de 2017

Historia Desenvolvimento iniciado em 1995 Consórcio europeu de 8 instituições (1996-1999) 2003  Projeto de código aberto 2004  versão 3.1 2008  versão 3.3.1 25 de março de 2017

Licença Kernel - LGPL Biblioteca básica - QPL Uso livre para desenvolvimento de código aberto Qualquer outro caso requer licença comercial Permite padronizar o CGAL Estimula novas contribuições para o CGAL 25 de março de 2017

Suporte Manual em pdf e html Servidor CVS Contato via e-mail com os desenvolvedores Exemplos prontos para serem testados 25 de março de 2017

Créditos Página do CGAL http://www.cgal.org 25 de março de 2017

Estrutura do CGAL 25 de março de 2017

Estrutura do CGAL Biblioteca Básica Algoritmos e estruturas de dados Biblioteca de suporte Visualização Arquivos E/S Tipos numéricos Geradores Kernel Objetos geométricos Operações geométricas Núcleo da biblioteca Configurações e asserções 25 de março de 2017

Kernel do CGAL 25 de março de 2017

O que há no kernel? Objetos geométricos elementares Operações elementares Primitivas 2D, 3D, kD Ponto Vetor Triângulo Círculo Predicados Comparações Testes de orientação Testes de inclusão Construções Interseção Distância 25 de março de 2017

Geometria Afim Ponto – Origem  Vetor Ponto – Ponto  Vetor Ponto + Vetor  Ponto Ponto + Ponto não definido 25 de março de 2017

Kernel e Tipos Numéricos Coordenadas cartesianas Coordenadas homogêneas 25 de março de 2017

Templates C++ Flexível 25 de março de 2017

Robustez Numérica 25 de março de 2017

Questões Numéricas typedef CGAL::Cartesian<NT> Kernel; NT sqrt2 = sqrt( NT(2) ); Kernel::Point_2 p(0,0), q(sqrt2,sqrt2); Kernel::Circle_2 C(p,2); assert( C.has_on_boundary(q) ); NT (field number type) deve implementar a função sqrt caso contrário, violação de asserção 25 de março de 2017

Predicados e Construções 25 de março de 2017

Representação Dual Triangulação Delaunay Predicados Orientação e ponto em esfera Diagrama de Voronoi Construções circuncentro 25 de março de 2017

Precisão Numérica Multiprecisão de inteiros Multiprecisão de números em ponto flutuante Multiprecisão de números racionais 25 de março de 2017

Biblioteca Básica 25 de março de 2017

Fecho Convexo 5 algoritmos diferentes em 2D 25 de março de 2017

Triangulações Estruturas 2D/3D triângulo/tetraedro Triangulações de Delaunay 2D/3D dinâmicas Triangulações regulares 2D/3D Triangulações restritas 2D 25 de março de 2017

Poliedros Half-edge 25 de março de 2017

Flexibilidade 25 de março de 2017

Características (Traits) Convex_hull_2 <InputIterator, OutputIterator, Traits> Polygon_2 <Traits, Container> Polyhedron_3 <Traits, HDS> Triangulation_3 <Traits, TDS> Min_circle_2 <Traits> O kernel do CGAL pode ser usado como característica para diversos algoritmos caso contrário, são providas características por omissão O usuário pode criar características personalizadas 25 de março de 2017

Mais flexibilidade O usuário pode adicionar informações estendendo classes base: vertex_base, halfedge_base, cell_base, etc. 25 de março de 2017

Triangulações 25 de março de 2017

Resumo Especificações Representação geométrica Projeto de software Definições Vários tipos de triangulação Representação geométrica Projeto de software Uso de traits Estrutura de dados para triangulação Flexibilidade 25 de março de 2017

Definição Uma triangulação é um conjunto de simplexos satisfazendo às seguintes propriedades: A interseção do fecho de dois simplexos de dimensão n é vazia, ou é uma face comum de dimensão n – 1. face, aresta ou vértice. 25 de março de 2017

Vários Tipos de Triangulação 25 de março de 2017

2D e 3D 25 de março de 2017

Triangulações Básica (genérica) Delaunay Regulares Restritas Construção “preguiçosa” (lazy) Delaunay Propriedade do círculo vazio Regulares Pontos com pesos Generalização do Delaunay Restritas Preservam as fronteiras dos objetos. 25 de março de 2017

Funcionalidades em Triangulações Funcionalidades gerais Percurso através da triangulação Localização de um ponto Operações Inserção Remoção Flip Diagrama de Voronoi 25 de março de 2017

Representação Geométrica 25 de março de 2017

Triangulação 2D Baseada em faces e vértices Vértice Face Face_handle v_face Face Vertex_handle vertex[3] Face_handle neighbor[3] Arestas estão implícitas std::pair<f, i> 25 de março de 2017

Triangulação 3D Baseada em células (tetraedros) e vértices Vértice Cell_handle v_face Cell Vertex_handle vertex[4] Cell_handle neighbor[4] Faces estão implícitas std::pair<c, i> Arestas estão implícitas std::pair<u, v> 25 de março de 2017

Projeto de Software 25 de março de 2017

Classes “Trait” Classes geométricas (trait) fornecem Objetos geométricos + predicados + construtores Polyhedron_3 <Traits, HDS> Triangulation_2 <Traits, TDS> Triangulation_3 <Traits, TDS> Flexibilidade Kernel pode ser usado como trait por omissão O usuário pode inserir características próprias 25 de março de 2017

Exemplos 25 de março de 2017

Triangulação Genérica #include <CGAL/Exact_predicates_inexact_constructions_kernel.h> #include <CGAL/Triangulation_3.h> #include <iostream> #include <fstream> #include <cassert> #include <list> #include <vector> struct K : CGAL::Exact_predicates_inexact_constructions_kernel {}; typedef CGAL::Triangulation_3<K> Triangulation; typedef Triangulation::Cell_handle Cell_handle; typedef Triangulation::Vertex_handle Vertex_handle; typedef Triangulation::Locate_type Locate_type; typedef Triangulation::Point Point; 25 de março de 2017

std::list<Point> L; L.push_front(Point(0,0,0)); int main() { std::list<Point> L; L.push_front(Point(0,0,0)); L.push_front(Point(1,0,0)); L.push_front(Point(0,1,0)); Triangulation T(L.begin(), L.end()); int n = T.number_of_vertices(); std::vector<Point> V(3); V[0] = {Point(0,0,1), Point(1,1,1), Point(2,2,2)}; n = n + T.insert(V.begin(), V.end()); assert( n == 6 ); assert( T.is_valid() ); Locate_type lt; int li, lj; Point p(0,0,0); 25 de março de 2017

Cell_handle c = T.locate(p, lt, li, lj); assert( lt == Triangulation::VERTEX ); assert( c->vertex(li)->point() == p ); Vertex_handle v = c->vertex( (li+1)&3 ); Cell_handle nc = c->neighbor(li); int nli; assert( nc->has_vertex( v, nli ) ); std::ofstream oFileT("output",std::ios::out); oFileT << T; Triangulation T1; std::ifstream iFileT("output",std::ios::in); iFileT >> T1; assert( T1.is_valid() ); assert( T1.number_of_vertices() == T.number_of_vertices() ); assert( T1.number_of_cells() == T.number_of_cells() ); return 0; } 25 de março de 2017

Triangulação de Delaunay #include <CGAL/Exact_predicates_inexact_constructions_kernel.h> #include <CGAL/Delaunay_triangulation_3.h> #include <CGAL/Triangulation_hierarchy_3.h> #include <cassert> #include <vector> struct K : CGAL::Exact_predicates_inexact_constructions_kernel {}; typedef CGAL::Triangulation_vertex_base_3<K> Vb; Typedef CGAL::Triangulation_hierarchy_vertex_base_3<Vb> Vbh; typedef CGAL::Triangulation_data_structure_3<Vbh> Tds; typedef CGAL::Delaunay_triangulation_3<K,Tds> Dt; typedef CGAL::Triangulation_hierarchy_3<Dt> Dh; typedef Dh::Vertex_iterator Vertex_iterator; typedef Dh::Vertex_handle Vertex_handle; typedef Dh::Point Point; 25 de março de 2017

// insertion of points on a 3D grid int main() { Dh T; // insertion of points on a 3D grid std::vector<Vertex_handle> V; for (int z=0 ; z<5 ; z++) for (int y=0 ; y<5 ; y++) for (int x=0 ; x<5 ; x++) V.push_back(T.insert(Point(x,y,z))); assert( T.is_valid() ); assert( T.number_of_vertices() == 125 ); assert( T.dimension() == 3 ); // removal of the vertices in random order std::random_shuffle(V.begin(), V.end()); for (int i=0; i<125; ++i) T.remove(V[i]); assert( T.number_of_vertices() == 0 ); return 0; } 25 de março de 2017

Flexibilidade 25 de março de 2017

Estrutura das Classes Base 25 de março de 2017

Classes Base pré-definidas #include <CGAL/Exact_predicates_inexact_constructions_kernel.h> #include <CGAL/Delaunay_triangulation_3.h> #include <CGAL/Triangulation_vertex_base_with_info_3.h> #include <CGAL/IO/Color.h> struct K: CGAL::Exact_predicates_inexact_constructions_kernel {}; typedef CGAL::Triangulation_vertex_base_with_info_3<CGAL::Color,K> Vb; typedef CGAL::Triangulation_data_structure_3<Vb> Tds; typedef CGAL::Delaunay_triangulation_3<K, Tds> Delaunay; typedef Delaunay::Point Point; 25 de março de 2017

// Set the color of finite vertices of degree 6 to red. int main() { Delaunay T; T.insert(Point(0,0,0)); T.insert(Point(1,0,0)); T.insert(Point(0,1,0)); T.insert(Point(0,0,1)); T.insert(Point(2,2,2)); T.insert(Point(-1,0,1)); // Set the color of finite vertices of degree 6 to red. Delaunay::Finite_vertices_iterator vit; for (vit = T.finite_vertices_begin(); vit != T.finite_vertices_end(); ++vit) if (T.degree(vit) == 6) vit->info() = CGAL::RED; return 0; } 25 de março de 2017

Estendendo Classes Base 25 de março de 2017

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h> #include <CGAL/Delaunay_triangulation_3.h> #include <CGAL/Triangulation_vertex_base_3.h> template < class GT, class Vb=CGAL::Triangulation_vertex_base_3<GT> > class My_vertex_base : public Vb { public: typedef typename Vb::Vertex_handle Vertex_handle; typedef typename Vb::Cell_handle Cell_handle; typedef typename Vb::Point Point; template < class TDS2 > struct Rebind_TDS { typedef typename Vb::template Rebind_TDS<TDS2>::Other Vb2; typedef My_vertex_base<GT, Vb2> Other; }; My_vertex_base() {} My_vertex_base(const Point& p) : Vb(p) {} My_vertex_base(const Point& p, Cell_handle c) : Vb(p, c) {} Vertex_handle vh; Cell_handle ch; 25 de março de 2017

struct K : CGAL::Exact_predicates_inexact_constructions_kernel {}; typedef CGAL::Triangulation_data_structure_3<My_vertex_base<K> > Tds; typedef CGAL::Delaunay_triangulation_3<K, Tds> Delaunay; typedef Delaunay::Vertex_handle Vertex_handle; typedef Delaunay::Point Point; int main() { Delaunay T; Vertex_handle v0 = T.insert(Point(0,0,0)); Vertex_handle v1 = T.insert(Point(1,0,0)); Vertex_handle v2 = T.insert(Point(0,1,0)); Vertex_handle v3 = T.insert(Point(0,0,1)); Vertex_handle v4 = T.insert(Point(2,2,2)); Vertex_handle v5 = T.insert(Point(-1,0,1)); // Now we can link the vertices as we like. v0->vh = v1; v1->vh = v2; v2->vh = v3; v3->vh = v4; v4->vh = v5; v5->vh = v0; return 0; } 25 de março de 2017