Алгоритм Брезенхема растровой дискретизации отрезка
При построении растрового образа отрезка необходимо, прежде всего, установить критерии "хорошей" аппроксимации. Первое требование состоит в том, что отрезок должен начинаться и кончаться в заданных точках и при этом выглядеть сплошным и прямым (при достаточно высоком разрешении дисплея этого можно добиться). Кроме того, яркость вдоль отрезка должна быть одинаковой и не зависеть от наклона отрезка и его длины. Это требование выполнить сложнее, поскольку горизонтальные и вертикальные отрезки всегда будут ярче наклонных, а постоянная яркость вдоль отрезка опять же достигается на вертикальных, горизонтальных и наклоненных под углом в 45° линиях. И, наконец, алгоритм должен работать быстро. Для этого необходимо по возможности исключить операции с вещественными числами. С целью ускорения работы алгоритма можно также реализовать его на аппаратном уровне. Рис. 9‑1 Растровый образ отрезка В большинстве алгоритмов используется пошаговый метод изображения, т.е. для нахождения координат очередной точки растрового образа наращивается значение одной из координат на единицу растра и вычисляется приращение другой координаты. Задача состоит в построении отрезка, соединяющего на экране точки с координатами Теперь, считая, что Следует заметить, что целочисленная координата Алгоритм Брезенхема построения растрового образа отрезка был изначально разработан для графопостроителей, но он полностью подходит и для растровых дисплеев. В процессе работы в зависимости от углового коэффициента отрезка наращивается на единицу либо Рис. 9.2. Связь углового коэффициента с выбором пикселя На рис. 9.2 это иллюстрируется для отрезка с угловым коэффициентом, лежащим в диапазоне от нуля до единицы. Из рисунка можно заметить, что если угловой коэффициент На рис. 9.3 показано, каким образом строятся точки растра для отрезка с тангенсом угла наклона На рис. 9.5 приведена блок-схема алгоритма для случая Рис. 9.3. Пиксели, принадлежащие развертке отрезка Рис. 9.4. График изменения отклонения Приведем общий алгоритм Брезенхема, который учитывает все возможные случаи направления отрезка, рассматриваемого как вектор на координатной плоскости (на рис. 9.6 выделены четыре области и указаны особенности алгоритма в каждой из них). В описании алгоритма используются следующие функции: swap (a, b): обмен значений переменных a, b;abs (a): абсолютное значение a;sign (a): 0, если a= 0, 1, если a>0, –1, если a<0;point (i, j) - инициализация точки (i, j).Предполагается, что концы отрезка
Рис. 9.5. Блок-схема одной ветви алгоритма Брезенхема Рис. 9.6. Четыре возможных направления отрезка
|