7.4.
Загальний алгоритм Брезенхема
Для того, щоб реалізація
алгоритму Брезенхема була повною, необхідно обробляти
відрізки у всіх октантах. Модифікацію легко зробити, враховуючи в алгоритмі
номер квадранта, в якому лежить відрізок і його кутовий коефіцієнт. Коли
абсолютна величина кутового коефіцієнта більше 1,
використовується для прийняття рішення про
зміну величини
. Вибір постійно
змінюється (на +1 або −1)
координати залежить від квадранта (рис. 7.7).

Рис. 7.7.
Розбір випадків для узагальненого алгоритму Брезенхема
Загальний алгоритм може мати
такий вигляд:
Ззагальнений цілочисельний алгоритм Брезенхема
квадрантів
передбачається,
що кінці відрізка
і
не збігаються
всі змінні вважаються цілими
функція Sign повертає
-1, 0, 1 для негативного, нульового і позитивного аргументу відповідно
ініціалізація змінних
![]()
![]()
![]()
![]()
![]()
![]()
обмін
значень
та
у залежності від кутового
коефіцієнта нахилу відрізка
if
then
тим = ![]()
![]()
Δy = тим
Обмін =1
else
Обмін = 0
end if
ініціалізація
з поправкою на половину пікселя
![]()
основний
цикл
for i = 1 to ![]()
Plot (x, y)
while (
)
if Обмін = 1 then
![]()
else
![]()
end if
![]()
end while
if Обмін = 1 then
![]()
else
![]()
end if
![]()
next i
finish
Приклад 7.4.
Узагальнений алгоритм Брезенхема
Для ілюстрації загального
алгоритму Брезенхема розглянемо відрізок із точки (0,
0) в точку (-8, -4). У прикладі 7.2. цей відрізок був оброблений за допомогою
простого ЦДА
початкові
дані
![]()
![]()
![]()
![]()
![]()
![]()
Обмін = 0
![]()
послідовне виконання основного циклу
|
i |
Plot |
e |
x |
y |
||
|
|
|
|
|
0 |
0 |
0 |
|
1 |
|
(0, 0) |
|
|
|
|
|
|
|
|
|
−16 |
0 |
−1 |
|
|
|
|
|
−8 |
−1 |
−1 |
|
2 |
|
(−1,−1) |
|
|
|
|
|
|
|
|
|
0 |
−2 |
−1 |
|
3 |
|
(−2, 1) |
|
|
|
|
|
|
|
|
|
−16 |
−2 |
−2 |
|
|
|
|
|
−8 |
−3 |
−2 |
|
4 |
|
(−3,−2) |
|
|
|
|
|
|
|
|
|
0 |
−4 |
−2 |
|
5 |
|
(−4, 2) |
|
|
|
|
|
|
|
|
|
−16 |
−4 |
−3 |
|
|
|
|
|
−8 |
−5 |
−3 |
|
6 |
|
(−5,−3) |
|
|
|
|
|
|
|
|
|
0 |
−6 |
−3 |
|
7 |
|
(−6, 3) |
|
|
|
|
|
|
|
|
|
−16 |
−6 |
−4 |
|
|
|
|
|
−8 |
−7 |
−4 |
|
8 |
|
(−7, 4) |
|
|
|
|
|
|
|
|
|
0 |
−8 |
−4 |
На рис.
7.8 наведений результат. Результати роботи двох алгоритмів відрізняються, рис.
7.2 і 7.8.

Рис. 7.8. Результат роботи
узагальненого алгоритму Брезенхема в третьому
квадранті