Общий алгоритм Брезенхема
Чтобы реализация алгоритма Брезенхема была полной, необходимо обрабатывать
отрезки во всех октантах. Модификацию легко сделать, учитывая в алгоритме номер
квадранта, в котором лежит отрезок и его угловой коэффициент. Когда абсолютная
величина углового коэффициента больше 1, y постоянно изменяется на единицу, а
критерий ошибки Брезенхема используется для принятия решения об изменении
величины x. Выбор постоянно изменяющейся (на +1 или -1) координаты зависит от
квадранта (рис. 15.1).
Обобщенный целочисленный алгоритм Брезенхема квадрантов
Предполагается, что концы отрезка (x1, y1) и
(x2, y2) не совпадают все переменные считаются целыми функция Sign возвращает -1, 0, 1 для отрицательного, нулевого и
положительного аргумента соответственно инициализация переменных x = x1 y = y1 Dx = abs(x2 - x1) Dy = abs(y2 - y1) s1 = Sign(x2 - x1) s2 = Sign(y2 - y1) обмен значений Dx и Dy
в зависимости от углового коэффициента наклона отрезка if Dy > Dx then Врем = Dx Dx = Dy Dy = Врем Обмен = 1 else Обмен = 0 end if инициализация e' с поправкой на половину пиксела e' = 2 * Dy - Dx основной цикл for i = 1 to Dx Plot (x, y) while (e' >= 0) if Обмен = 1 then x = x + s1 else y = y + s2 end if e' = e' - 2 * Dx end while if Обмен = 1 then y = y + s2 else x = x + s1 end if e' = e' + 2 * Dy next i finish
Пример. Для иллюстрации общего алгоритма Брезенхема рассмотрим отрезок из
точки (0, 0) в точку (-8, -4).
Начальные установки: x = 0 y = 0 Dx = 8 Dy = 4 s1 = -1 s2 = -1 Обмен = 0 e = 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 |
На рис. 15.2 продемонстрирован результат.
|