16
Computação Gráfica Preenchimento de Áreas Aula 7 Prof. Esp. Danilo Augusto [email protected]

07 - CG - Preenchimentodereas(2)

Embed Size (px)

Citation preview

Page 1: 07 - CG - Preenchimentodereas(2)

Computação GráficaPreenchimento de Áreas

Aula 7 Prof. Esp. Danilo Augusto [email protected]

Page 2: 07 - CG - Preenchimentodereas(2)

Preenchimento de ÁreasHá duas abordagens básicas para preenchimento de áreas:

• algoritmos baseados em regiões de preenchimento (Boundary-Fill Algorithm e Flood-Fill Algorithm)

Page 3: 07 - CG - Preenchimentodereas(2)

Estes algoritmos são mais utilizados para o preenchimento de regiões irregulares com fronteiras complexas. Muito utilizado em softwares de desenho interativos.

Page 4: 07 - CG - Preenchimentodereas(2)

Preenchimento de Áreas

• algoritmos baseados em linhas de varredura (Scan-line Fill Algorithm);Estes algoritmos são mais utilizados para preenchimento de polígonos, círculos, e outras figuras primitivas. Utiliza a estrutura

Page 5: 07 - CG - Preenchimentodereas(2)

geométrica para orientar a identificação de pontos interiores.

Page 6: 07 - CG - Preenchimentodereas(2)

Exemplo:Cor de Preenchimento: AmareloFronteira: Preto

Preenchimento de Regiões

Page 7: 07 - CG - Preenchimentodereas(2)

• Boundary-Fill Algorithm: faz o preenchimento de uma região a partir da escolha de um ponto inicial interno até as fronteiras determinadas por uma cor.

Page 8: 07 - CG - Preenchimentodereas(2)

Preenchimento de Regiões

• Flood-Fill Algorithm: faz o preenchimento de uma região a partir da escolha de um ponto inicial interno substituindo uma cor existente por uma nova cor. Pode estar delimitado por

Page 9: 07 - CG - Preenchimentodereas(2)

diferentes cores.Exemplo:Cor de Preenchimento: AmareloCor existente: Branco

Page 10: 07 - CG - Preenchimentodereas(2)

Preenchimento de RegiõesEstes algoritmos podem utilizar 4 ou 8 pontos vizinhos para detectar as áreas conectadas a serem preenchidas.

Page 11: 07 - CG - Preenchimentodereas(2)

Preenchimento de Regiões• Cuidado ao identificar os pontos!

Page 12: 07 - CG - Preenchimentodereas(2)

Algoritmo Boundary-FillBoundaryFill4 ( x, y, corPreenc, corLimite)

corAtual←obtemCor(x,y);

se corAtual≠corLimite E corAtual≠corPreenc então

selecione (corPreenc);

ponto (x,y);

BoundaryFill4(x+1,y,corPreenc,corLimite);

BoundaryFill4(x-1,y,corPreenc,corLimite);

Page 13: 07 - CG - Preenchimentodereas(2)

BoundaryFill4(x,y+1,corPreenc,corLimite);

BoundaryFill4(x,y-1,corPreenc,corLimite);

fim se;

Fim;

Page 14: 07 - CG - Preenchimentodereas(2)

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)

Page 15: 07 - CG - Preenchimentodereas(2)

Algoritmo Boundary-FillO 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á métodos alternativos que diminuem a utilização da pilha, fazendo o

Page 16: 07 - CG - Preenchimentodereas(2)

preenchimento da linha atual e empilhando apenas os pontos limites das linhas superior e inferior que ainda não foram preenchidos.