Algoritmos de Preenchimento de Regiões

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

Preenchimento de Áreas e de Polígonos. Antonio L. Bajuelos Departamento de Matemática Universidade de Aveiro

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

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

No arranque do algoritmo as tabelas ET e AET tem o seguinte estado:

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

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

Preenchimento de Polígonos

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

Ponto q está no polígono?

CES-11. Algoritmos e Estruturas de Dados

CES-11. Árvores. Conceito de árvore. Definição recursiva de árvore Definições associadas a árvore. Ordenação dos nós de uma árvore

Visibilidade. Apontamentos CG + Edward Angel, Sec Instituto Superior Técnico Computação Gráfica 2009/2010

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

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark. Terceiro Teste 19 de Maio de 2012

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas

Algoritmos de ordenação Ordenação rápida ( Quicksort )

Algoritmos geométricos

Síntese de Imagem Cálculo de Visibilidade

Visualização 2D: - Transformação window to viewport - Clipping

CONCEITO DE ÁRVORE CES-11. A raiz é o único nó que não possui ancestrais. As folhas são os nós sem filhos. Exemplos:

1º Teste Computação Gráfica

Questão 1 Determine a medida da mediana relativa ao lado AC do triângulo de vértices A( 2,4), B(1,1) e C(6,3).

MATEMÁTICA DISCRETA PARA ENGENHARIA DE COMPUTAÇÃO

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

Interseção de Semiplanos

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

Árvores & Árvores Binárias

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

Aula 08. Estruturas de dados Árvore e Grafo

Circuitos Lógicos Combinacionais (parte 2) CPCX UFMS Slides: Prof. Renato F. dos Santos Adaptação: Prof. Fernando Maia da Mota

ÁRVORE BINÁRIA DE BUSCA TDA-ABB

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

Programação Funcional Aulas 5 & 6

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

ESCOLA SECUNDÁRIA DE ALBERTO SAMPAIO

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

Cálculo II. Resumo Teórico Completo

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

Sejam A e B conjuntos não vazios. Chama-se produto cartesiano de A por B o conjunto

Circuitos Sequenciais: Circuitos Combinacionais: SISTEMAS DIGITAIS. Módulo 2 Prof. Celso

4.6 Sombras de sólidos geométricos

25 Problemas de Óptica

Conversão por Varrimento

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

Desenho de Segmentos de Recta

Exemplo de um problema de transporte, com 3 fontes e 3 destinos. Custos unitários de transporte para o exemplo de problema de transporte

Prova Prática de Geometria Descritiva A

BCC204 - Teoria dos Grafos

Derivadas Parciais Capítulo 14

Coordenadas Cartesianas

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

Iniciação à Informática

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

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

Pipeline de Visualização 2D

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

RaizDoito. 1. Num referencial o.m. do plano, considere a reta r de equação x = -5.

Questão 1: O histograma deve ser: [0, 1, 4, 2, 0, 3, 0,, 0, 2] Exemplo: Para a matriz

Equação de Segundo Grau. Rafael Alves

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

5. Invólucros Convexos no Plano (cont )

Pesquisa em Grafos. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/ / 33

Sistemas Digitais / Sistemas Digitais I 3 Simplificação de funções

Capítulo 1-Sistemas de Coordenadas, Intervalos e Inequações

Lista de Exercícios 2 Vetores

1. Determine o valor do integral curvilíneo do campo F (x, y, z) = xzî + xĵ + y k ao longo da linha (L), definida por: { x 2 /4 + y 2 /25 = 1 z = 2

01 Referenciais e Coordenadas Cartesianas

Quicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Transcrição:

Sistemas Gráficos/ Computação Gráfica e Interfaces 1

Classificação dos algoritmos: Preenchimento segundo contorno existente Por difusão [flood-fill]: a. Limitado por contorno b. Limitado por interior de região Por análise do contorno [boundary algorithm] Preenchimento por varrimento segundo descrição de contorno [scan conversion] Algoritmo da lista de pontos de fronteira ordenados Algoritmo da lista de arestas activas 2

Conectividade 4 Conectividade 8 Aplicam-se a contorno e região Região con. 4 Região con. 8 Contorno con. 8 Contorno con. 4 3

a b a b Região de conectividade 4 b não é vizinho de a Região de conectividade 8 b é vizinho de a 4

Preenchimento segundo contorno existente [flood-fill] Limitado pelo contorno Princípio: Começa num ponto interior e espalha-se como se fosse líquido. Funciona em regiões com buracos. 5

Algoritmo para região de conectividade 4: (contorno pode ser de conectividade 4 ou 8) void floodfill(int x, int y) { if (pointcolor(x,y) o ( <> ContourColor o && (pointcolor(x,y) o ( <> FillColor) o { ChangeColor(x,y, FillColor); // apelo recursivo aos 4 vizinhos floodfill(x+1,y); floodfill(x-1,y); floodfill(x,y+1); floodfill(x,y-1); } } Para região de connectividade id d 8: chama recursivamente a função floodfill para os oito vizinhos. Para além dos indicados temos: (x+1, y+1), (x-1, y+1), (x-1, y-1), (x+1, y-1) 6

Fronteira não completamente fechada pode originar erro durante a execução do programa Evitam-se os erros se a leitura pointcolor(x,y) fornecer o valor correspondente a ContourColor no caso do ponto se encontrar fora do ecrã. 7

Preenchimento segundo contorno existente [flood-fill] região definida pelo seu interior void floodfill(int x, int y) { if (pointcolor(x,y) == RegionColor) { ChangeColor(x,y, FillColor); // apelo recursivo aos 4 vizinhos floodfill(x+1,y); floodfill(x-1,y); floodfill(x,y+1); floodfill(x,y-1); } } Aplicação: para substituir uma cor por outra Problemas: consumo de stack (pilha) Soluções para minimizar o tamanho da stack: - Evitar declarar variáveis locais - Não passar a cor de preenchimento como parâmetro Notar que agora não existe o problema da fronteira incompleta. 8

Classificação dos algoritmos: Preenchimento segundo contorno existente Por difusão [flood-fill]: a. Limitado por contorno b. Limitado por interior de região Por análise do contorno [boundary algorithm] Preenchimento por varrimento segundo descrição de contorno [scan conversion] Algoritmo da lista de pontos de fronteira ordenados Algoritmo da lista de arestas activas 9

Preenchimento segundo contorno existente Por análise do contorno [boundary algorithm] Princípio: trabalha linha a linha e apenas coloca na pilha algumas extremidades de segmentos. Algoritmo: 1. Parte de um ponto inicial, situado no interior, que começa por ser colocado na pilha. 2. Se pilha vazia, então termina, senão retira um ponto da pilha. 3. A partir desse ponto preenche na horizontal, para a direita e, em seguida, para a esquerda até encontrar o contorno. Toma nota das extremidades Xleft e Xright. 4. Na linha imediatamente abaixo procura, entre Xleft e Xright, os novos pontos de partida. Estes pontos são colocados na pilha. 5. Idem 4, para a linha imediatamente acima. 6. Volta a 2. 10

Preencimento de regiões por análise do contorno 2º 1º xleft 3º xright Pontos colocados na stack Ponto inicial 11

Preencimento de regiões por análise do contorno Exemplo: Processa s0 Processa s2 S2 8 7 6 5 S0 4 3 2 0 1 4 3 2 0 1 S0 S1 S0 S1 Processa s1 8 4 7 3 2 6 5 0 1 Ponto seguinte? S0 9 10 S1 12

Preencimento de regiões por análise do contorno Processa s1 Processa s2 8 7 6 5 8 7 6 5 4 16 3 S2 S0 15 2 14 0 1 9 13 12 10 11 4 18 16 3 17 S0 15 2 14 0 1 9 13 12 10 11 S1 S1 Processa s1 Processa s0 8 7 6 5 8 7 6 5 4 3 2 0 1 4 3 2 0 1 18 17 S0 9 10 18 17 9 10 16 15 14 13 12 11 16 15 14 13 12 11 24 23 22 21 20 19 24 23 22 21 20 19 Pilha vazia - Fim 13

Classificação dos algoritmos: Preenchimento segundo contorno existente Por difusão [flood-fill]: a. Limitado por contorno b. Limitado por interior de região Por análise do contorno [boundary algorithm] Preenchimento por varrimento segundo descrição de contorno [scan conversion] Algoritmo da lista de pontos de fronteira ordenados Algoritmo da lista de arestas activas 14

Preenchimento por varrimento segundo descrição de contorno [scan conversion] - Algoritmo da lista de pontos de fronteira ordenados E B A D C O algoritmo determina as intersecções das arestas com as linhas de varrimento do ecrã e ordena-as. Os pontos a preencher estão entre dois pares de pontos. 15

Algoritmo: 1. Determinação das intersecções das arestas com as linhas de varrimento do ecrã (utilizando, por exemplo, o algoritmo MidPoint modificado, de tal forma que produza um só ponto por horizontal). Designados de pontos de fronteira 2. Ordenação dos pontos obtidos. Primeiro segundo Y e, em seguida, para o mesmo Y, segundo X. X1,Y1 precede X2,Y2 se Y1 < Y2 ou se Y1 = Y2 e X1 <=X2 3. Os segmentos horizontais de preenchimento são agora especificados considerando pares de pontos consecutivos. 16

9 8 7 6 5 4 3 2 1 0 Algoritmos de Preenchimento de Regiões E A B D (2,2) (9,2) (4,1) (9,1) 0 1 2 3 4 5 6 7 8 9 10 11 C Pontos de fronteira obtidos (por linha): (0,9) (0,9) (7,9) (7,9) (0,8) (1,8) (6,8) (7,8) (1,7) (2,7) (5,7) (7,7) (1,6) (3,6) (5,6) (8,6) (1,5) (4,5) (4,5) (8,5) (1,4) (8,4) (2,3) (8,3) (9,0) (9,0) Cuidado com os vértices duplos Esta aresta só gera um ponto de intersecção Simplificação da estrutura de dados: guardar por segmentos (x1, x2, y). Ex: (0,0,9) (7,7,9) (018) (0,1,8) (678) (6,7,8)... 17

Os vértices duplos podem causar problemas: Vértices simples: Desvantagem do algoritmo: a ordenação pode ser um processo lento por envolver um elevado número de pontos. Melhoramento: Algoritmo da tabela de listas de pontos ordenados Consiste em construir uma lista ordenada de pontos para cada valor de Y. 12 Algoritmo: 11 10 1. Determinar as intersecções (x i,y i ) para cada aresta. Para cada intersecção colocar x i na lista y i. 9 0 0 7 7 Y 8 2. Em cada lista y i, ordenar os valores X por ordem 0 1 6 7... crescente. 1 4 9 3. Em cada lista y i, considerar os pares de valores X consecutivos, que definem os segmentos horizontais a 0 visualizar. 18

Preenchimento por varrimento segundo descrição de contorno [scan conversion] - Algoritmo da lista das arestas activas 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 F E A D C 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 B Zona Y=12...15 Y=9...11 Y=7...8 Y=1...6 Y=0 Arestas activas por zona AB, FA BC, FA BC, EF BC,CD,DE,EF BC,CDCD Notar que o número de arestas activas por linha é par. Vértice simples (B): a aresta sai da lista na linha anterior. AB já não aparece na linha 11. Vértice duplo (E): a aresta sai da lista na linha seguinte. - O preenchimento realiza-se por linha de varrimento do ecrã, pelo que será viável tratar e memorizar apenas os pontos relativos a essa linha. - Só as arestas activas entram no preenchimento de uma linha de varrimento. - Interessa manter a Lista das Arestas Activas. - Esta lista é actualizada sempre que se entra numa nova zona. 19

- Algoritmo da lista das arestas activas Algoritmo da lista das arestas activas : 1. Constituição da Tabela das Arestas - Para cada aresta é memorizado: - A coordenada X. - DX, valor a adicionar a X, para encontrar o ponto seguinte quando se incrementa Y de 1. - LongY, comprimento da aresta segundo o eixo Y. 2. Para cada linha de varrimento: - Verificar na tabela de arestas se existem novas arestas nesta linha. Em caso afirmativo, juntá-las à Lista das Arestas Activas. - Ordenar os valores de X. 3. Agrupa aos pares, os valores de X que definirão os segmentos horizontais a visualizar. 4. No final da linha preparar a informação para a linha seguinte: Para cada Aresta Activa: 5. Voltar a 2. Decrementar o valor LongY. Se LongY=0, então a aresta respectiva sai da lista das arestas activas, senão é calculado o novo X, adicionando DX ao valor actual. 20

- Algoritmo da lista das arestas activas O primeiro passo do algoritmo será a classificação dos vértices em: simples ou duplos. A seguir constrói-se a tabela das arestas. 14 A 13 12 B 11 10 9 F 8 7 D 6 5 4 3 2 1 E 0 C 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Y 14 AB AF 13 null 12 null 11 BC 10 null 9 null 8 EF 7 null 6 CD DE Tabela das arestas: regista as arestas que entram em cada linha. {6, -1, 6}... 5 null 1 null 0 null 21

- Algoritmo da lista das arestas activas A análise é efectuada de cima para baixo e da direita it para a esquerda. Se vértice simples: longy = y2 y1 Se vértice duplo: longy = y2 y1 + 1 22

14 A 13 12 11 10 9 F 8 7 6 5 4 3 2 1 0 E C 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 D B Zona Y=12...15 Y=9...11 Y=7...8 Y=1...6 Y=0 Lista das Arestas activas por zona AB, AF BC, AF BC, FE BC,CD,DE,FE BC,CD 1º Passo Y=14 Lista = {AB,AF} AF} Pares de valores X: (6,6) AB (9,3,2) AF (5,-1,5) 2º Passo Y=13 Lista = {AB,AF} Pares de valores X: (5,9) AB (12,3,1) AF (4,-1,4) 3º Passo Y=12 Lista = {AB,AF} {X, DX, LongY} AB {6, 3, 3} BC {15, -0.18, 12} CD {9, 0.66, 7} DE {9, -1.2, 6} Pares de valores X: (4,12) AB (15,3,0) AF (3,-1, 3) 4º Passo Y=11 Lista = {BC,AF} Pares de valores X: (4,15) BC (14.82,-0.18,10) AF (2,-1, 2) FE {0, 0.43, 8}... AF {6, -1, 6} 23

Exercício 5. Seja um polígono definido pela sucessão de vértices {(1,6), (6,2), (6,6)} a ser preenchido pelo algoritmo da lista de pontos de fronteira ordenados. a) Apresente o resultado dos dois passos iniciais do algoritmo, quando aplicado ao polígono em questão. b) Explique como se efectua o preenchimento do polígono, com base nos resultados da alínea anterior. Exame de 20 de Junho de 2002 (Exame de 13 de Julho de 2002) 24