Anda di halaman 1dari 25

Computao Grfica

Preenchimento de reas
Aula 7
Prof. Esp. Danilo Augusto
daniloaugusto@gmail.com

Preenchimento de reas
H duas abordagens bsicas para
preenchimento de reas:
algoritmos baseados em regies de
preenchimento (Boundary-Fill Algorithm
e Flood-Fill Algorithm)
Estes algoritmos so mais utilizados para o
preenchimento de regies irregulares com
fronteiras complexas. Muito utilizado em
softwares de desenho interativos.
Preenchimento de reas
algoritmos baseados em
linhas de varredura (Scan-line
Fill Algorithm);
Estes algoritmos so mais
utilizados para preenchimento de
polgonos, crculos, e outras
figuras primitivas. Utiliza a
estrutura geomtrica para orientar
a identificao de pontos
interiores.


Preenchimento de Regies
Boundary-Fill Algorithm: faz o preenchimento de
uma regio a partir da escolha de um ponto inicial
interno at as fronteiras determinadas por uma cor.
Exemplo:
Cor de
Preenchimento:
Amarelo
Fronteira: Preto
Preenchimento de Regies
Flood-Fill Algorithm: faz o preenchimento de uma
regio a partir da escolha de um ponto inicial interno
substituindo uma cor existente por uma nova cor.
Pode estar delimitado por diferentes cores.
Exemplo:
Cor de
Preenchimento:
Amarelo
Cor existente:
Branco
Preenchimento de Regies
Estes algoritmos podem utilizar 4 ou 8 pontos vizinhos
para detectar as reas conectadas a serem
preenchidas.
Preenchimento de Regies
Cuidado ao identificar os pontos!
Algoritmo Boundary-Fill
BoundaryFill4 ( x, y, corPreenc, corLimite)
corAtualobtemCor(x,y);
se corAtualcorLimite E corAtualcorPreenc ento
selecione (corPreenc);
ponto (x,y);
BoundaryFill4(x+1,y,corPreenc,corLimite);
BoundaryFill4(x-1,y,corPreenc,corLimite);
BoundaryFill4(x,y+1,corPreenc,corLimite);
BoundaryFill4(x,y-1,corPreenc,corLimite);
fim se;
Fim;
BoundaryFill4
( 10, 20, AMARELO, PRETO)
BoundaryFill4
( 11, 20, AMARELO, PRETO)
BoundaryFill4
( 9, 20, AMARELO, PRETO)
BoundaryFill4
( 10, 21, AMARELO, PRETO)
BoundaryFill4
( 10, 19, AMARELO, PRETO)
Algoritmo Boundary-Fill
O algoritmo Boundary-Fill apresentado utiliza
exaustivamente a pilha interna devido a recursividade. A
cada ponto novo, o procedimento chamado
recursivamente para os quatro pontos vizinhos (ou oito).
H mtodos alternativos que diminuem a utilizao da
pilha, fazendo o preenchimento da linha atual e
empilhando apenas os pontos limites das linhas superior
e inferior que ainda no foram preenchidos.

Exemplo
Preenche a linha, e insere na pilha os pontos
conectados da linha de cima e de baixo mais
esquerda (pontos 1 e 2).
Exemplo
Desempilha o ponto 2, preenche a linha, e insere na pilha
os pontos conectados da linha de cima e de baixo mais
esquerda (apenas o ponto 3).
Exemplo
Desempilha o ponto 3, preenche a linha, e insere na pilha
os pontos conectados da linha de cima e de baixo mais
esquerda (pontos 4, 5 e 6).
Algoritmo Flood-Fill
floodFill4 ( x, y, corPreenc, corExistente){
se obtemPonto(x,y)= corExistente ento
selecione (corPreenc);
ponto (x,y);
floodFill4(x+1,y,corPreenc,corExistente);
floodFill4(x-1,y,corPreenc, corExistente);
floodFill4(x,y+1,corPreenc, corExistente);
floodFill4(x,y-1,corPreenc, corExistente);
fim se;
Fim;
Algoritmo Flood-Fill
O aperfeioamento proposto para o Boundary-fill
tambm pode ser utilizado neste algoritmo.
Preenchimento de reas
algoritmos baseados em
linhas de varredura (Scan-line
Fill Algorithm);
Estes algoritmos so mais
utilizados para preenchimento de
polgonos, crculos, e outras
figuras primitivas. Utiliza a
estrutura geomtrica para orientar
a identificao de pontos
interiores.


Algoritmo baseado em Linha de
Varredura (Scan Line)
Este algoritmo passa uma linha paralela ao eixo X
verificando as interseces dessa linha com as linhas
dos polgonos.
Scan Line
a

b c d
Algoritmo baseado em Linha de
Varredura (Scan Line)
Os pontos de interseco de cada linha so ordenados
e cada par deste conjunto determina um intervalo de
preenchimento.
Scan Line
Intervalos determinados pelos
pares: (a,b) (c,d)
a

b c d
Algoritmo baseado em Linha de
Varredura (Scan Line)
Porm, quando a Scan Line passa por um vrtice,
preciso decidir se um ou dois pontos de interseco
sero calculados.
Scan Line y
Scan Line y
Algoritmo baseado em Linha de
Varredura (Scan Line)
Caso as duas linhas que esto ligadas pelo vrtice
constituem um incremento ou decremento contnuo
de y, ento apenas um ponto de interseco criado.
Scan Line y a b
Algoritmo baseado em Linha de
Varredura (Scan Line)
Caso contrrio, o vrtice constitui um ponto de mximo
ou mnimo, e dois pontos devem ser criados para
determinar os intervalos.
Scan Line y
a b b
c
Algoritmo baseado em Linha de
Varredura (Scan Line)
Como a linha possui um coeficiente angular constante.
Os algoritmos que usam o conceito de Scan Line
procuram utilizar as informaes da linha anterior para
computar os prximos pontos de interseco.
Note que os pontos de interseco acompanham o
coeficiente angular da linha. Isto s quebrado quando
uma nova aresta aparece no clculo.
Algoritmo baseado em Linha de
Varredura (Scan Line)
Em geral, os algoritmos com Scan Line, fazem uma
primeira varredura criando uma lista que descreve a
relao das arestas com a scan line. E depois a utilizam
para determinar o preenchimento. Isto acelera o
processo de preenchimento e simplifica os clculos dos
pontos de interseco.
Exerccios Aula 7
1. Explique cada linha do seguinte algoritmo
BoundaryFill4 ( x, y, corPreenc, corLimite)
corAtualobtemCor(x,y);
se corAtualcorLimite E corAtualcorPreenc ento
selecione (corPreenc);
ponto (x,y);
BoundaryFill4(x+1,y,corPreenc,corLimite);
BoundaryFill4(x-1,y,corPreenc,corLimite);
BoundaryFill4(x,y+1,corPreenc,corLimite);
BoundaryFill4(x,y-1,corPreenc,corLimite);
fim se;

2. Os algoritmos baseados em regies de preenchimento
(Boundary-Fill Algorithm e Flood-Fill Algorithm) so mais utilizados
para o preenchimento de regies irregulares com fronteiras
complexas, sendo empregado na maioria dos softwares de desenho
interativos. Qual a diferena entre eles?
Exerccios Aula 7
3. Como se pode otimizar o funcionamento do
algoritmo de preenchimento Boundary-Fill?
4. Exemplifique o funcionamento do algoritmo
baseado em Linha de Varredura (Scan Line),
contemple na resposta o mtodo de
otimizao e o tratamento dos vrtices?