Когда |k| > 1, у - основное направление и у постоянно изменяется на 1, а изменение ошибки анализируется для принятия решения об изменении координаты х. Когда |k| < 1, основным направлением является х, поэтому х постоянно изменяется на 1, а изменение ошибки анализируется для принятия решения об изменении координаты у.
Выбор постоянно изменяющейся (основной) координаты (на +1 или -1) зависит от октанта (см. рис. 9).
Обобщенный алгоритм Брезенхема на псевдокоде:
(x1, y1) – начальная точка
(x2, y2) – конечная точка
e - ошибка
dx – приращение по координате x
dy - приращение по координате y
sx – знак приращения по x
sy - знак приращения по y
флаг - показывает, произошел обмен основной и дополнительной координаты или нет
врем – временная переменная для обмена
Sign (x) – функция, возвращающая –1,0 или 1 для отрицательного, нулевого и положительного аргумента соответственно.
Plot (x, y) – процедура “подсвечивания” пиксела с координатами (x,y)
начало
инициализация переменных
x = x1, y = y1
dx = abs (x2-x1), dy = abs (y2-y1)
|
|
sx = sign (x2-x1 ), sy = sign (y2-y1 )
обмен значений dx и dy, если y – основное направление
if dy>dx then
врем = dx
dx = dy
dy = врем
флаг = 1
else
флаг = 0
end if
инициализация ошибки
e = 2*dy – dx
основной цикл
for i = 1 to dx
plot (x,y)
изменение дополнительной координаты
if(e>=0) then
if flag = 1 then x = x + sx
else y = y + sy
end if
e = e – 2*dx
конец if
изменение основной координаты
if flag = 1 then y = y + sy
else x = x + sx
конец if
накопление ошибки
e = e + 2*dy
next i
конец