Geometria Computacional



Documentos relacionados
Algoritmos e Estrutura de Dados III. Árvores

Qual é Mesmo a Definição de Polígono Convexo?

CRIANDO MDT. Para criar o MDT Selecione o botão Modelagem ou clique na área esquerda da do programa onde se terá a opção criar Nova Modelagem.

DAS5102 Fundamentos da Estrutura da Informação

Levantamento topográfico

6. Geometria, Primitivas e Transformações 3D

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Organização e Arquitetura de Computadores I

COMPUTAÇÃO GRÁFICA. Rasterização e Preenchimento de Regiões. MARCO ANTONIO GARCIA DE CARVALHO Fevereiro de Computação Gráfica

Conceitos e fórmulas

Solução da prova da 1 a fase OBMEP 2008 Nível 1

casa. Será uma casa simples, situada em terreno plano, com sala, dois quartos, cozinha, banheiro e área de serviço.

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,...

Figura 1 Busca Linear

Existe, mas não sei exibir!

1 UNIT Universidade do Trabalhador Dr. Abel dos Santos Nunes

Objetivos. Apresentar as superfícies regradas e superfícies de revolução. Analisar as propriedades que caracterizam as superfícies regradas e

2 A Derivada. 2.1 Velocidade Média e Velocidade Instantânea

AV2 - MA (a) De quantos modos diferentes posso empilhá-los de modo que todos os CDs de rock fiquem juntos?

TIPOS DE REFLEXÃO Regular Difusa

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

REFLEXÃO DA LUZ: ESPELHOS 412EE TEORIA

UNIDADE 4 - ESTRUTURA CRISTALINA

Algoritmos. Objetivo principal: explicar que a mesma ação pode ser realizada de várias maneiras, e que às vezes umas são melhores que outras.

Os ícones que são usados nos desenhos de moldes estão dispostos na paleta na seguinte ordem:

Vetores. Definição geométrica de vetores

PROBLEMAS DE OTIMIZAÇÃO

Aplicações de Combinatória e Geometria na Teoria dos Números

O B. Podemos decompor a pirâmide ABCDE em quatro tetraedros congruentes ao tetraedro BCEO. ABCDE tem volume igual a V = a2.oe

(x, y) = (a, b) + t*(c-a, d-b) ou: x = a + t*(c-a) y = b + t*(d-b)

4.2 Produto Vetorial. Orientação sobre uma reta r

AULA 6 LÓGICA DOS CONJUNTOS

Múltiplos Estágios processo com três estágios Inquérito de Satisfação Fase II

Matéria: Matemática Assunto: Comprimento ou Perímetro Prof. Dudan

4. Curvas planas. T = κn, N = κt, B = 0.

Departamento de Matemática - UEL Ulysses Sodré. Arquivo: minimaxi.tex - Londrina-PR, 29 de Junho de 2010.

Geometria Espacial Elementos de Geometria Espacial Prof. Fabiano

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

Técnicas de Detecção de Colisão para Jogos

As peças a serem usinadas podem ter as

2. MÓDULO DE UM NÚMERO REAL

GAAL /1 - Simulado - 1 Vetores e Produto Escalar

Projeção ortográfica da figura plana

Imposto progressivo. vem inteirinho, sem nenhum imposto, e no segundo há que se pagar 15%, isto é, 165, restando apenas 935.

EAD Árvore árvore binária

Busca. Pesquisa sequencial

Conceitos Fundamentais

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

Integrais Duplas e Coordenadas Polares. 3.1 Coordenadas Polares: Revisão

UNIVERSIDADE FEDERAL DA BAHIA INSTITUTO DE MATEMÁTICA 5 0 Encontro da RPM TRANSFORMAÇÕES NO PLANO

ESTRUTURAS DE DADOS II MSc. Daniele Carvalho Oliveira

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

IBM1018 Física Básica II FFCLRP USP Prof. Antônio Roque Aula 6. O trabalho feito pela força para deslocar o corpo de a para b é dado por: = =

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

Princípio da Casa dos Pombos II

36ª OLIMPÍADA BRASILEIRA DE MATEMÁTICA Primeira Fase Nível 3 Ensino Médio

Projeção ortográfica de modelos com elementos paralelos e oblíquos

Orientação a Objetos

Vetores Lidando com grandezas vetoriais

Comandos Sequenciais if else, e Switch

ITA º DIA MATEMÁTICA BERNOULLI COLÉGIO E PRÉ-VESTIBULAR

2ª Lista de Exercícios

Lista de Exercícios 4: Soluções Sequências e Indução Matemática

Resolução de problemas e desenvolvimento de algoritmos

Árvores de Suporte de Custo Mínimo

Sumário: Fluxo Operacional... 3 Contatos Agenda Online Reservas de Salas Tarefas... 42

MANUAL DE UTILIZAÇÃO DO ESPAÇO VIRTUAL DE APRENDIZAGEM EVA

Algoritmos e Estrutura de Dados. Prof. Tiago A. E. Ferreira

Lei de Gauss Origem: Wikipédia, a enciclopédia livre.

QUESTÃO 1 ALTERNATIVA B

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Estrutura de Dados Básica

Resumo. Maria Bernadete Barison apresenta aulas práticas sobre RETAS em Desenho Geométrico. Geométrica vol.1 n.1d RETAS CAD

Capítulo 19. Algoritmos de Ordenação e de Pesquisa. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Computação Gráfica Interativa

Aula prática Como utilizar um multímetro

Informática no Ensino de Matemática Prof. José Carlos de Souza Junior

CONVENÇÃO DE CÓDIGO JAVA

Manual AGENDA DE BACKUP

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 CES-11 CES-11

Orientação a Objetos

O coeficiente angular

CAPÍTULO 2. Grafos e Redes

Um capacitor não armazena apenas carga, mas também energia.

Linguagem C: Árvores Binarias

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Programação Orientada a Objetos: Lista de exercícios #1. Bruno Góis Mateus

Pointer Jumping. odg(v) e idg(v): graus de saída e entrada do vértice v V. um vértice r tal que. O vértice r é dita raíz de T

2 echo "PHP e outros.";

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

António Costa. Paulo Roma Cavalcanti

Explorando Poliedros

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

ESCALAS. Escala numérica objeto. é a razão entre a dimensão gráfica e a dimensão real de um determinado. d/d = 1/Q

A abordagem do assunto será feita inicialmente explorando uma curva bastante conhecida: a circunferência. Escolheremos como y

Universidade Federal de Goiás Instituto de Informática Processamento Digital de Imagens

PROFº. LUIS HENRIQUE MATEMÁTICA

Princípio da Casa dos Pombos I

Transcrição:

Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação Universidade Federal do Espírito Santo CCA UFES Geometria Computacional Tópicos Especiais em Programação Site: http://jeiks.net E-mail: jacsonrcsilva@gmail.com

Geometria Computacional É Importante em aplicações, como Gráficos computacionais, Robótica, Design, etc. No Mundo real: A maioria dos objetos não é feita por linhas que tendem ao infinito; Já os objetos no computador: Em sua maioria representam a geometria como arranjos de segmentos de linha. Curvas fechadas ou formas são representadas por coleções ordenadas de segmentos de linha ou polígonos (discretos). Geometria computacional: A geometria de segmentos de linhas discretas e polígonos. É um divertido e interessante assunto, mas não tipicamente ensinado em cursos universitários necessários. O aluno que aprende um pouco de geometria computacional tem vantagem e uma janela aberta para uma área fascinante de algoritmos ainda sob investigação nos dias de hoje. 2

Segmentos de Linha Um segmento de linha s é uma reta formada por dois pontos: A = (1 ; 1) B = (3 ; 2,5) Assim, podem ser representados por um par de pontos: typedef struct { point p1,p2; } segmento; 3

Segmentos de Linha e Interseção Primitiva mais importante na geometria sobre segmentos: Testar se um determinado par deles se cruzam. Porém: Dois segmentos podem ser linhas paralelas, o que significa que não se cruza. Eles podem se cruzar nas extremidades, ou no meio do segmento. Isso pode ser um verdadeiro problema. Leia qualquer especificação do problema com cuidado para ver se ele não terá linhas paralelas ou segmentos sobrepostos. No entanto, é melhor fazer o programa preparado para lidar com eles. 4

Segmentos de Linha e Interseção Nós utilizaremos nossas rotinas de interseção para encontrar se a interseção de um ponto existe. bool point_in_box(point p, point b1, point b2){ return } (p.x >= min(b1.x,b2.x)) && (p.x <= max(b1.x,b2.x)) && (p.y >= min(b1.y,b2.y)) && (p.y <= max(b1.y,b2.y)) ; 5

bool segments_intersect(segment s1, segment s2) { line l1,l2; /* linhas contendo os seguimentos de entrada */ point p; /* ponto de intersecao */ Universidade Federal do Espírito Santo CCA UFES points_to_line(s1.p1, s1.p2, l1); points_to_line(s2.p1, s2.p2, l2); if (same_lineq(l1,l2)) /* segmentos sobrepostos ou disjuntos */ return( point_in_box(s1.p1,s2.p1,s2.p2) point_in_box(s1.p2,s2.p1,s2.p2) point_in_box(s2.p1,s1.p1,s1.p2) point_in_box(s2.p1,s1.p1,s1.p2) ); if (parallelq(l1,l2)) return false; if (! intersection_point(l1,l2,p) ) return false; } return point_in_box(p,s1.p1,s1.p2) && point_in_box(p,s2.p1,s2.p2); 6

Computação de Polígonos e Universidade Federal do Espírito Santo CCA UFES Polígonos: Ângulos São um conjunto de segmentos de linha sem interseção que fecham-se em um vértice, formando uma figura geométrica. O primeiro vértice do conjunto de segmentos é igual ao último. Suas arestas não possuem interseção: Somente pares de segmentos terão encontros em um de seus pontos (ponto final do segmento). São a estrutura básica para descrever formas no plano. Representação: Não listar os segmentos (arestas) do polígono. Fazer a listagem dos n vértices ordenados que formam as extremidades do polígono typedef struct { int n; /* número de pontos no polígono */ point p[maxpoly]; /* array de pontos do polígono */ } polygon; 7

Polígono Convexo A Região Convexa se e somente se todo segmento de reta reside na mesma região. A região A é convexa: Pois qualquer segmento de reta que for escolhido só tem pontos na mesma região A. O polígono B já não é convexo: Pois existe pelo menos um segmento de reta que tem extremidades na região B, mas tem pontos fora da região. Repare que os pontos M e N estão em B, mas O é um ponto fora da região. Neste caso a região B é chamada de Região Não- Convexa. Assim, todos os ângulos devem ter no máximo 180º ou π radianos. Universidade Federal do Espírito Santo CCA UFES 8

Polígonos Calcular o ângulo definido entre três pontos ordenados é um problema complicado. Nós podemos evitar a necessidade de saber ângulos reais na maioria dos algoritmos geométricos utilizando o atributo sentido anti-horário ccw(a, b, c). Esta rotina testa se o ponto C está posicionado à direita da linha dirigida que vai do ponto A para o ponto B. Caso positivo, o ângulo formado pela varredura de A até C em sentido anti-horário em torno B é agudo. Caso negativo, o ponto ou encontra-se à esquerda de AB ou os três pontos são colineares. 9

Polígonos bool ccw(point a, point b, point c) { } return (signed_triangle_area(a,b,c) > EPSILON); bool cw(point a, point b, point c) { } return (signed_triangle_area(a,b,c) < EPSILON); bool collinear(point a, point b, point c) { } return (fabs(signed_triangle_area(a,b,c)) <= EPSILON); 10

Casco Convexo (Convex Hulls) Universidade Federal do Espírito Santo CCA UFES O casco convexo de um conjunto Q de pontos no plano é o menor polígono convexo que os envolve. Todos os pontos de Q devem estar dentro do polígono ou sobre sua borda. Para visualizar esse polígono: Imagine que os pontos são pregos saindo do plano; Imagine uma linha esticada de modo a conter todos os pontos. Essa linha, após ser colocada prendendo-se aos pregos mais externos, delimitará o casco convexo dos pontos. 11

Varredura de Graham Considerado o primeiro algoritmo de Geometria Computacional (1972), há quase tantos algoritmos diferentes para envoltória convexa quanto há para ordenação. O algoritmo de Graham: Ordena os pontos do conjunto: em ordem angular ou da esquerda para a direita E depois insere os pontos na envoltória nesta ordem. 12

Varredura de Graham Algoritmo incremental (2D) Pontos são pré-ordenados de forma conveniente; Cada ponto é adicionado ao fecho convexo e testado. Precisamos de um ponto inicial p0 que faz parte do casco convexo de forma garantida. Solução: Tomar o ponto com menor coordenada x ou y como p 0. Na verdade, um ponto extremo em qualquer direção serve. 13

Varredura de Graham Os pontos restantes são ordenados de forma cíclica com respeito aos ângulos formados pelas retas p 0 p i. Pontos colineares são removidos nesse processo. 14

Varredura de Graham Cada ponto considerado deve estar à esquerda da aresta anteriormente computada (teste de orientação) Ou o ponto anterior faz uma curva para esquerda. 15

Varredura de Graham O fecho convexo é mantido como uma pilha de pontos. Percorre-se os pontos enquanto o ponto no topo da pilha não fizer uma curva para à esquerda, Quando se considera o novo ponto, ele é desempilhado. Em seguida estende-se a cadeia empilhando-se o novo ponto. 16

Varredura de Graham Universidade Federal do Espírito Santo CCA UFES 17

Triangulação Achar o perímetro de um polígono é fácil: Basta calcular o comprimento de cada lado usando a fórmula da distância euclidiana e somar tudo ao final. Computar a área de manchas irregulares já é mais difícil. A ideia é dividir o polígono em triângulos não sobrepostos e somar suas áreas. Esta operação é chamada de triangulação. 18

Triangulação Triangular um polígono convexo é fácil: basta conectar um dado vértice v a todos os outros (n - 1) vértices. Desta forma, o polígono é dividido em P triângulos usando arestas que não se cruzam e que se situam completamente dentro de P. Mas e quando o polígono não é convexo? 19

Triangulação Representação da triangulação: Listando as arestas ou, como é feito aqui, Com uma lista explícita dos índices dos vértices em cada triângulo: typedef struct { int n; int t[maxpoly][3]; } triangulation; O algoritmo de triangulação mais eficiente roda em tempo linear do número de vértices. O algoritmo mais fácil de implementar é baseado no corte da orelha (Algoritmo de Van Gogh). 20

Algoritmo de Van Gogh Uma orelha de um polígono P é um triângulo definido por um vértice v e seus vizinhos da esquerda e da direita (l e r), tal que o triângulo (v, l, r) se situa completamente dentro de P. Como lv e vr são arestas (limites) de P, o lado que define a orelha é rl. l v r 21

Algoritmo de Van Gogh rl deve se situar completamente no interior do polígono P. Para isso, lvr deve definir um ângulo não-reflexo. Nenhum outro segmento do polígono pode ser cortado por este lado, Senão um pedaço será retirado do triângulo. O fato importante é que todo polígono sempre contém uma orelha. Na verdade, duas no mínimo para n 4. 22

Algoritmo de Van Gogh Algoritmo: teste cada um dos vértices até achar uma orelha. Adiciona-se a aresta associada e corta-se a orelha, decrementando o número de vértices. O corte da orelha necessita testar se um dado ponto se situa dentro de um triângulo. O polígono restante deve também ter uma orelha, tal que continua-se a cortar até que apenas três vértices sejam mantidos, ficando um triângulo. 23

Algoritmo de Van Gogh Deve-se testar se um vértice que define uma orelha tem duas partes. Para o teste do ângulo: Utiliza-se novamente ccw/cw. Assume-se que os vértices estão ordenados em uma ordem anti-horária em volta do centro virtual. A reversão da ordem do polígono nos obriga a trocar o sinal no teste do ângulo. 24

Triangulação de um polígono via algoritmo de Van Gogh (corte da orelha), com triângulos rotulados na ordem da inserção (A-I ) 25

Computação das áreas Pode-se então computar a área de qualquer polígono: Basta triangular e somar as áreas de todos os triângulos formados. Somando as áreas com sinal dos triângulos Estes definidos por um ponto arbitrário p com cada segmento do polígono P, Chega-se na área de P, porque os triângulos com sinal negativo cancelam a área fora do polígono: n 2 Área(P)= 1 2 (x i y i+1 x i+1 y i ) i=0 26

http://sites-final.uclouvain.be/mema/poly2tri/ 27

Problemas Fáceis: Chainsaw Massacre; Useless Tile Packers; Intermediários: Trees on My Island; Difíceis: Nice Milk. 28