Алгоритм Брезентхема

Хотя данный алгоритм первоначально был разработан для цифровых графических построителей, он в равной степени подходит для растровых устройств.

Алгоритм выбирает оптимальные растры из координат для построения отрезка. В процессе работы одна из координат либо X, либо Y, в зависимости от углового коэффициента изменяется на 1, изменение другой координаты равно нулю или единице. Это зависит от расстояния действий положения отрезков, ближайшим координатам сетки.

Алгоритм построен так, что требуется только проверить знак ошибки. Проиллюстрируем на рисунке для отрезка, лежащего в диапазоне от 0 до 1.

≤ 1

Ошибка = ошибка + .

На рисунке можно увидеть, что угловой коэффициент из точки (0.0) > 1/2.

Приведём алгоритм для первого октанта.

х, y, , Δу – целые

е – вещественное

1) инициализация переменных

х = х1

у = у1

Δх = х21

Δу = у21

е = Δу*Δх-1/2

2) начало основного цикла

for i:=1 to Δx

plot (x,y)

while (e>0)

y = y+1;

e = e-1;

and while

x = x+1

e = e+

end;

end;


Обобщённый целочисленный алгоритм

Предполагается, что концы отрезка не совпадают и все переменные считаются целыми. Функция sign возвращает -1, 0, 1 для отрицательного, нулевого и положительного аргумента соответственно.

Инициализация переменных:

х = х1

у = у1

Δх = abs (x2-x1)

Δy = abs (y2-y1)

S1 = sign (x2-x1)

S2 = sign (y2-y2)

Обмен значений Δх и Δу в зависимости от углового коэффициента наклона отрезка.

if Δy > Δx then

временная = Δx

Δх = Δу

Δу = временная

else

обмен = 0

end if

Инициализация с поправкой на половину пикселя

= 2* Δy – Δх

Основной цикл:

for i:= 1 to Δх

plot (x, y)

while () ≥ 0

if обмен = 1 then

x = x+S1

else

y = y+S2

end if

= - 2 * Δх

end while

if обмен = 1 then

y = y+S2

else

x = x + S1

else if

= + 2 * Δy

next i

finish



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: