Preenchimento de Polígonos

Documentos relacionados
Prof. Fernando V. Paulovich 25 de abril de SCC Computação Gráca

Pipeline de Visualização 2D

Computação Gráfica. Rasterização. Aula 4. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro

Objetos Gráficos Planares

Prof. Fernando V. Paulovich 3 de agosto de SCC Computação Gráca

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

Introdução ao Processamento e Síntese de imagens Recorte 2D

Objetos Gráficos Planares

Processamento de Malhas Poligonais

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

Sumário. Traçado de Retas. Antialiasing e OpenGL. 1 Introdução. 2 Conversão Segmento de Reta. 3 Algoritmo DDA. 4 Algoritmo de Bresenham

Introdução à Computação Gráfica Ray Tracing. Claudio Esperança Paulo Roma Cavalcanti

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

Prova Fundamentos Computação Gráfica

GAAL /1 - Simulado - 3 exercícios variados de retas e planos

Computação Gráfica - 11

Prof. Dr. Leandro Alves Neves. Conceitos Fundamentais. Algoritmos de Conversão Matricial.

Algoritmos geométricos

Geometria Computacional

CÁLCULO II. Lista Semanal 3-06/04/2018

Professor: Computação Gráfica I. Anselmo Montenegro Conteúdo: - Objetos gráficos planares. Instituto de Computação - UFF

Geometria Analítica. Prof. M.Sc. Guilherme Schünemann

Características Principais. Introdução à Computação Gráfica Ray Tracing. Ray Casting. Contexto Histórico. Claudio Esperança Paulo Roma Cavalcanti

Lista 3.2: Retas - Planos e Distâncias PARTE 1: RETAS. 1. Verificar se os pontos P 1 (5, 5,6) e P 2 (4, 1,12) pertencem à reta r : x 3 1 = y + 1

Modelos de Objetos por Malhas Poligonais. Maria Cristina F. de Oliveira

PLANIFICAÇÃO ANUAL MATEMÁTICA 4º ANO

CÁLCULO I. Lista Semanal 01 - Gabarito

1 Para expressar um ponto intermediário em função dos pontos extremos, precisamos

Instituto de Computação Bacharelado em Ciência da Computação Disciplina: Computação Gráfica Primeira lista de exercícios

Processamento digital de imagens

TESTE DE AVALIAÇÃO 11º ANO

Transformações de Visualização 2D: Clipping. Antonio L. Bajuelos Departamento de Matemática Universidade de Aveiro

Computação Gráfica - 09

Computação Gráfica II

2. Na gura abaixo, representa-se um cubo. Desenhe a echa de origem H que representa ! DN =! DC

Lista 1: Vetores - Engenharia Mecânica. Professora: Elisandra Bär de Figueiredo

Lista de Álgebra Linear Aplicada

PLANIFICAÇÃO MENSAL/ANUAL Matemática 4.ºano

Computação Gráfica - 09

- Plano Anual 4º Ano de Escolaridade -

Modelos de Objetos por Malhas Poligonais. Maria Cristina F. de Oliveira

Resolvendo inequações: expressões com desigualdades (encontrar os valores que satisfazem a expressão)

MATEMÁTICA A - 11.º Ano TRIGONOMETRIA

MATRIZ DE REFERÊNCIA - SPAECE MATEMÁTICA 5 o ANO DO ENSINO FUNDAMENTAL TEMAS E SEUS DESCRITORES

Objetos Gráficos Espaciais

Instituto de Computação Bacharelado em Ciência da Computação Disciplina: Computação Gráfica Primeira lista de exercícios

Álgebra Linear I - Aula 6. Roteiro

FICHA de AVALIAÇÃO de MATEMÁTICA A 11.º Ano Versão 2

Visibilidade. Licenciatura em Engenharia Informática e de Computadores Computação Gráfica. Edward Angel, Cap. 7 Apontamentos CG

Álgebra Linear I - Lista 7. Respostas

Computação Gráfica. Representação e Modelagem

Algoritmos de Preenchimento de Regiões

10. Determine as equações cartesianas das famílias de retas que fazem um ângulo de π/4 radianos com a reta y = 2x + 1.

7. Determine a equação da parábola que passa pelos pontos P (0, 6), Q(3, 0) e R(4, 10).

FICHA de AVALIAÇÃO de MATEMÁTICA A 10.º Ano Versão 2

Determinação de Superfícies Visíveis

Algoritmo para Construção do Diagrama de Voronoi com abordagem de Divisão e Conquista

AGRUPAMENTO DE ESCOLAS DE VALE DE MILHAÇOS PLANIFICAÇÃO ANUAL DE MATEMÁTICA 4.º ANO DE ESCOLARIDADE

1.- Escrevendo como uma potência de base 2 cada um dos números : A= ( 2 3 ) 7 ; B = e C = escreva-os em ordem decrescente:

6. Calcular as equações paramétricas de uma reta s que passa pelo ponto A(1, 1, 1) e é ortogonal x 2

FICHA de AVALIAÇÃO de MATEMÁTICA A 10.º Ano Versão 3

Geometria Computacional

SCE-201 Computação Gráfica. Representação de Objetos Tridimensionais Modelos Poligonais

Solução da prova da 1.ª Fase. b) Queremos os números interessantes do tipo ABC6. Isso implica que A x B x C = 6. Temos dois casos a considerar:

2 Conceitos básicos de topologia

Geometria Computacional

Matriz de Referência de Matemática - Ensino Médio

Produto interno e produto vetorial no espaço

FICHA de AVALIAÇÃO de MATEMÁTICA A 11.º Ano Versão 4

UNIVERSIDADE FEDERAL DE VIÇOSA DEPARTAMENTO DE MATEMÁTICA LISTA DE EXERCÍCIOS DE MAT243-CÁLCULO III

TESTE INTERMÉDIO 11.º ANO

O Problema de Visibilidade. Computação Gráfica Recorte. Onde Acontece? O que é Recorte? Renato Ferreira

Vetores e Geometria Analítica

Interseção de Semiplanos

Transcrição:

Preenchimento de Polígonos SCC0250 - Computação Gráca Prof. Fernando V. Paulovich http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências Matemáticas e de Computação (ICMC) Universidade de São Paulo (USP) 24 de maio de 2011 1 / 46

Introdução Sumário 1 Introdução 2 Teste de Interior-Exterior 3 Algoritmo Scanline Preenchimento de Regiões Irregulares 2 / 46

Introdução Sumário 1 Introdução 2 Teste de Interior-Exterior 3 Algoritmo Scanline Preenchimento de Regiões Irregulares 3 / 46

Introdução Introdução Além do desenho de linhas, uma outra construção útil é o preenchimento de áreas Usado para descrever superfícies ou objetos sólidos Embora qualquer forma possa ser preenchida, normalmente as APIs grácas suportam polígonos Maior eciência por serem descritos por equações lineares Maioria da superfícies curvas podem ser aproximadas por polígonos 4 / 46

Introdução Introdução Aproximação de uma curva é normalmente chamada de tesselação de uma superfície ou malha de polígonos Essas aproximações podem ser rapidamente geradas como visões wire-frame 5 / 46

Introdução Introdução Um polígono é uma gura plana especicada por um conjunto de 3 ou mais vértices (posições) ligados sequencialmente por arestas (linhas retas) Arestas só tem pontos comuns nos seus inícios e ns Todos os vértices no mesmo plano Devido a erros de arredondamento, as arestas de um polígono podem não ser coplanares Usar triângulos para resolver esse problema 6 / 46

Introdução Classicação de Polígonos Se todos os ângulos interiores de um polígono forem menores que 180 0, o polígono é convexo caso contrário é dito côncavo Em um polígono convexo, dois pontos interiores denem um segmento de reta também no interior 7 / 46

Introdução Classicação de Polígonos O termo Polígono Degenerado descreve um polígono com vértices colineares, ou que apresenta vértices repetidos Uma API gráca para ser robusta deve rejeitar polígonos não planares ou degenerados Na verdade isso é deixado a cargo do programador 8 / 46

Introdução Classicação de Polígonos APIs grácas normalmente só trabalham com polígonos convexos Melhor dividir um polígono côncavo em um conjunto de polígonos convexos OpenGL requer que todos os polígonos sejam convexos 9 / 46

Introdução Identicando Polígonos Côncavos Criar vetores com as arestas e fazer o produto vetorial de arestas adjacentes A coordenada-z de todos os produtos deve ter o mesmo sinal em um polígono convexo 10 / 46

Introdução Dividindo Polígonos Côncavos Dividindo Polígonos Côncavos Criar vetores para dois vértices consecutivos E k = V k+1 V k Calcular o produto vetorial desses no sentido anti-horário Se algum produto for negativo, o polígono é côncavo Dividir o polígono ao longo da linha do primeiro vértice 11 / 46

Introdução Dividindo em Polígono em Triângulos Um polígono convexo pode ser dividido em triângulos Pegue quaisquer três vértices consecutivos e forme um triângulo Remova o vértice do meio da lista de triângulos Repita o procedimento até restarem 3 vértices 12 / 46

Teste de Interior-Exterior Sumário 1 Introdução 2 Teste de Interior-Exterior 3 Algoritmo Scanline Preenchimento de Regiões Irregulares 13 / 46

Teste de Interior-Exterior Testes de Interior-Exterior Vários processos grácos precisam identicar regiões interiores de objetos mais complexos que quadrados ou círculos Dois algoritmos Regra par-impar (ou regra da paridade impar) Regra do winding-number não zero 14 / 46

Teste de Interior-Exterior Regra Par-Impar Desenhar um segmento de reta de um ponto P a um ponto distante fora dos limites de coordenadas do polígono Contar os cruzamentos de arestas com esse segmento Se o número for ímpar, P está dentro Caso contrário P está fora Assegurar que o segmento não intercepta nenhum vértice 15 / 46

Teste de Interior-Exterior Regra Par-Impar 16 / 46

Teste de Interior-Exterior Regra do Winding-number não zero Conta o número de vezes que a fronteira de um objeto gira em volta de um ponto particular na direção anti-horária Um ponto é dito interior se sua contagem for diferente de zero 17 / 46

Teste de Interior-Exterior Regra do Winding-number não zero Conta o número de vezes que a fronteira de um objeto gira em volta de um ponto particular na direção anti-horária Um ponto é dito interior se sua contagem for diferente de zero Algoritmo Inicializa a contagem com zero 18 / 46

Teste de Interior-Exterior Regra do Winding-number não zero Conta o número de vezes que a fronteira de um objeto gira em volta de um ponto particular na direção anti-horária Um ponto é dito interior se sua contagem for diferente de zero Algoritmo Inicializa a contagem com zero Dene um segmento de reta de uma posição P até um ponto distante Não pode passar pelos vértices 19 / 46

Teste de Interior-Exterior Regra do Winding-number não zero Conta o número de vezes que a fronteira de um objeto gira em volta de um ponto particular na direção anti-horária Um ponto é dito interior se sua contagem for diferente de zero Algoritmo Inicializa a contagem com zero Dene um segmento de reta de uma posição P até um ponto distante Não pode passar pelos vértices Conta a quantidade de cruzamentos com as arestas (direcionais) +1 toda vez que cruzar uma aresta da direita para esquerda 1 toda vez que cruzar uma aresta da esquerda para direita 20 / 46

Teste de Interior-Exterior Regra do Winding-number não zero 21 / 46

Teste de Interior-Exterior Regra do Winding-number não zero Processo baseado em Produto Vetorial Calcular o produto vetorial entre o vetor denido pela aresta e o vetor denido pelo segmento de reta +1 se o componente-z do produto for positivo 1 caso contrário Processo baseado em Produto Escalar Encontrar um vetor perpendicular ao vetor do segmento de reta (v x, v y ) ( v y, v x ) e fazer o produto escalar com o vetor da aresta +1 se o produto for positivo 1 caso contrário 22 / 46

Sumário 1 Introdução 2 Teste de Interior-Exterior 3 Algoritmo Scanline Preenchimento de Regiões Irregulares 23 / 46

Maioria das APIs limita o preenchimento de áreas Polígonos porque esses são descritos por equações lineares Polígonos convexos porque assim somente duas arestas são cruzadas Porém, é possível preencher o interior de qualquer tipo de forma (ferramentas de desenho) 24 / 46

Existem basicamente duas formas Determinar os intervalos de preenchimento usando scalines e preencher o interior Indicado para polígonos A partir de um ponto, colorir a vizinhança até encontrar as bordas Indicado para formas mais complexas 25 / 46

Algoritmo Scanline Sumário 1 Introdução 2 Teste de Interior-Exterior 3 Algoritmo Scanline Preenchimento de Regiões Irregulares 26 / 46

Algoritmo Scanline Algoritmo Scanline Primeiro determina as intersecções das scanlines com o polígono Então, as seções da scanline que residirem dentro do polígono são coloridas Usa a regra par-ímpar Para polígonos, 2 equações lineares são usadas para encontrar as intersecções Calcula as intersecções de um polígono da esquerda para a direita 27 / 46

Algoritmo Scanline Algoritmo Scanline 28 / 46

Algoritmo Scanline Problema da Scanline Problemas quando a scanline passa por um vértice Intersecta dois polígonos simultaneamente 29 / 46

Algoritmo Scanline Problema da Scanline A contagem de intersecção deve ser diferente dependendo da topologia Duas arestas de lados opostos da scaline: conta uma intersecção Duas arestas do mesmo lado da scaline: conta duas intersecções 30 / 46

Algoritmo Scanline Solução para o Problema da Scanline Para descobrir se as arestas estão opostas Denir a fronteira do polígono de forma anti-horária (ou horária) e observar as mudanças em y Se os 3 vértices de duas arestas consecutivas são monotonicamente crescentes (ou decrescentes) conta somente uma intersecção Caso contrário conta duas 31 / 46

Algoritmo Scanline Solução para o Problema da Scanline Outra solução (pré-processamento) Percorrer as arestas no sentido anti-horário (ou horário) e vericar se 3 vértices consecutivos são monotonicamente crescentes (decrescentes) em relação a y Nesse caso a aresta inferior pode ser reduzida para assegurar somente uma intersecção 32 / 46

Algoritmo Scanline Algoritmo Scanline (Intersecção) A interseção da i-ésima scanline com uma aresta {(x 1, y 1 ), (x 2, y 2 )} é calculada com duas equações y = i x = y/m b m = (y 2 y 1 )/(x 2 x 1 ) b = y 1 /m x 1 33 / 46

Algoritmo Scanline Algoritmo Scanline (Intersecção) É possível acelerar esse processo usando uma abordagem incremental m = (y k+1 y k )/(x k+1 x k ) Como entre duas scalines consecutivas y k+1 y k = 1 Então m = 1/(x k+1 x k ) x k+1 = x k + 1/m 34 / 46

Algoritmo Scanline Algoritmo Scanline É possível usar somente inteiros lembrando que m = y x Então x k+1 = x k + x y 35 / 46

Algoritmo Scanline Algoritmo Scanline Para polígonos convexos, só existe um bloco de pixels subsequentes em cada scanline Só processa a scanline até encontrar duas intersecções Mesmo algoritmo anterior, porém muito mais simples Intersecções nas arestas não apresentam dubiedade 36 / 46

Preenchimento de Regiões Irregulares Sumário 1 Introdução 2 Teste de Interior-Exterior 3 Algoritmo Scanline Preenchimento de Regiões Irregulares 37 / 46

Preenchimento de Regiões Irregulares Preenchimento de Regiões Irregulares É possível preencher uma região irregular selecionando um pixel e pintando os pixels vizinhos até alcançar as bordas 38 / 46

Preenchimento de Regiões Irregulares Algoritmo de Preenchimento de Borda Se a borda de uma região tem a mesma cor, é possível preencher essa região pixel por pixel até atingir a cor da borda Normalmente usado em programas grácos Começa com um ponto inicial (x, y) e testa os vizinhos para ver a cor, se não for borda, preenche 39 / 46

Preenchimento de Regiões Irregulares Algoritmo de Preenchimento de Borda (a) Diferentes testes de vizinhança (b) Problemas com a máscara de quatro vizinhos 40 / 46

Preenchimento de Regiões Irregulares Algoritmo de Preenchimento de Borda 1 void fill(int x, int y, int fillcolor, int bordercolor) { 2 int intcolor; 3 getpixel(x,y,intcolor); 4 if((intcolor!= bordercolor) && (intcolor!= fillcolor)) { 5 setpixel(x,y, fillcolor); 6 fill(x+1,y,fillcolor,bordercolor); 7 fill(x-1,y,fillcolor,bordercolor); 8 fill(x,y+1,fillcolor,bordercolor); 9 fill(x,y-1,fillcolor,bordercolor); 10 } 11 } 41 / 46

Preenchimento de Regiões Irregulares Algoritmo de Preenchimento de Borda Problemas se algum pixel interior já for da cor escolhida para ser preenchida Algum ramo da recursão pode ser descartado Pode levar a um consumo excessivo de memória devido a recursão Solução é empilhar, ao invés de pixels vizinhos, blocos de pixels sucessivos (o pixel inicial desses) 42 / 46

Preenchimento de Polígonos Preenchimento de Regiões Irregulares Algoritmo de Preenchimento de Borda 43 / 46

Preenchimento de Regiões Irregulares Algoritmo Flood-Fill As vezes é necessário colorir uma área que não é denida apenas por uma cor de borda Ao invés de procurar uma cor de borda, procurar por uma cor de interior Se o interior tem mais de uma cor, pode-se inicialmente substituir essa cor para que todos pixels do interior tenham a mesma cor 44 / 46

Preenchimento de Regiões Irregulares Algoritmo de Preenchimento de Borda 1 void fill(int x, int y, int fillcolor, int interiorcolor) { 2 int color; 3 getpixel(x,y,color); 4 if(color == interiorcolor) { 5 setpixel(x,y, fillcolor); 6 fill(x+1,y,fillcolor, interiorcolor); 7 fill(x-1,y,fillcolor, interiorcolor); 8 fill(x,y+1,fillcolor, interiorcolor); 9 fill(x,y-1,fillcolor, interiorcolor); 10 } 11 } 45 / 46

Preenchimento de Regiões Irregulares Observação No caso de preenchimento de áreas irregulares, cada pixel está sendo pintado com uma cor No caso de rendering de superfícies, cada pixel é pintado com a cor determinada pela aplicação do algoritmo de iluminação + tonalização (shading) 46 / 46