Professional Documents
Culture Documents
ALGORITMO DE BRESENHAN
No algoritmo apresentado nas aulas anteriores vimos que, no caso da reta possuir um
coeficiente angular m entre -1 e 1 (1 < m < 1) ou seja, inclinação menor do que 45o
(dx>=dy) deveríamos percorrer o eixo x de um em um (fazer xi+1 = xi + 1), calculando
pela equação da reta y = m.x + b o valor de y (Lembrando que se a reta tem inclinação
maior do que 45o (dx<dy) devemos fazer o mesmo só que variando y de um em um e
calculando x).
Esse método tem um custo computacional relativamente caro pois envolve operação
de multiplicação (m.x), e para complicar m é um número real. Além disso, é necessário
“arredondar” ( ROUND(y) ) o valor de y, que também é real, para transformá-lo em
inteiro.
Uma variação desse método, como vimos, é calcular o y utilizando o y anterior:
yi+1 = yi + m
De qualquer forma ainda é feito uma operação de adição entre dois números reais
(ponto flutuante) e ainda é necessário “arredondar” o valor de yi+1 ( ROUND(yi+1) ).
Algoritmo de BRESENHAM é atrativo porque ele utiliza somente aritmética inteira.
Nenhuma variável do tipo real é utilizada e dessa forma não é necessário fazer
arredondamentos. Vou apresentar o algoritmo para linhas com coeficiente angular
entre 0 e 1. Para os demais valores de coeficientes pode-se aplicar o mesmo algoritmo
com os pontos devidamente refletidos nos eixos x e y.
O algoritmo utiliza uma variável de decisão di que a cada passo é proporcional à diferença
entre s e t mostrados na figura abaixo. A figura 4.1 mostra o passo número i, onde o ponto Pi-
1 foi determinado como o mais próximo da reta real no passo anterior, e agora precisa
determinar qual dos dois pixels (Si e Ti) será ativado. Se s < t então Si é o mais próximo da
reta real e deverá ser ativado, caso contrário, Ti é que deverá ser ativado. Em resumo:
Se s-t < 0 ativar Si, senão ativar Ti
Um ponto que deve ser ressaltado é que neste algoritmo os pontos extremos de um
segmento devem ser inteiros, dessa forma deve-se fazer um arredondamento inicial nos
pontos extremos simplesmente para satisfazer esta condição.
Vamos entender agora como é definida a variável de decisão di que tem a finalidade de
determinar qual pixel deve ser ativado:
Tomemos um segmento qualquer que tem os seguintes pontos extremos (x1,y1) e
(x2,y2), sendo x1,x2,y1 e y2 são inteiros, como explicado anteriormente. Sendo dx=x2-x1
e dy=y2-y1, imaginemos que a figura 4.1 mostre apenas uma parte desse segmento e que
estamos em um determinado passo i do algoritmo de BRESENHAM. Então os pixels Pi-1 ,
Si e Ti têm as seguintes coordenadas (índices na matriz de pixels) inteiras, (r,q) , (r+1,q) e
(r+1,q+1) respectivamente.
Se a equação da reta suporte desse segmento é
y=mx+b ou melhor
y= (dy/dx).x +b (1.1)
s = (dy/dx).(r+1) + b - q (1.2)
da mesma forma:
t = (q+1) - y
substituindo y pela equação 1.1 temos:
t = (q+1) - (dy/dx).(r+1) - b (1.3)