( 1 ^

F(x,y) = -2W ау +--ау + 2Н(ах + I - ах) = 2Н -W. (10.8)

V 2 )

Замечание. Если бы мы предварительно не умножили функцию на 2, то результат был бы Я- 0,5У/, что сделало бы невозможным использование целых значений всех участвующих величин!

Таким образом, перед началом процесса мы полагаем F= 2Н - \V, х = ал,у = а . Затем на каждом шаге делаем следующее.

1. Присваиваем пикселу (.г, у) нужное значение цвета.

2. Увеличиваем х на 1; если F< 0, то добавляем к Fвеличину 2Я; в противном случае увеличиваем у на 1 и добавляем к F величину -2( W - II).

Листинг 10.5. Алгоритм средней точки (частный случай)

bresenhamdntPoint a. IntPoint b) {

// restriction: а.х < b.x and 0 < H/W < 1 // ограничения: а.х < b.x и 0 < H/W < 1

int у = а.у. W = b.x - а.х. Н = Ь.у - а.у:

int F = 2 * Н - W; // current error term // текущая невязка

for (int х = а.х: х <= b.x: // inner loop // внутренний цикл

{

setPixeKx. у): if(F < 0)

F += 2 * H:

// set up for next pixel // устанавливаем для следующего пиксела else{

у++:

F += 2 * (Н - W); Все вышеизложенное и определяет алгоритм Брезенхема для данного частного случая (см. листинг 10.5). Поскольку в этом алгоритме предусмотрена повторная инициализация для каждой новой прямой, то он является повторяемым: повторное рисование какой-либо прямой другим цветом полностью замещает первую прямую; например, рисование цветом фона целиком удаляет ранее нарисованную прямую.

Средства для растровой графики

Алгоритм Брезенхема предельно прост, в его внутреннем цикле содержатся только несколько операций сравнения и сложения. Для достижения максимальной скорости его легко реализовать на языке ассемблера. Этот алгоритм часто реализуется аппаратно в графических устройствах специального назначения; где обеспечивается еще большая его скорость.

Пример 10.4.1

Полезно проследить за изменением функции .г7 на конкретном примере. Пусть (ах, а ) = (4,1), а (Ьх, Ьу) = = (16,4). Тогда 1У-12иЯ-3. Поскольку наклон данной прямой равен 1/4, мы ожидаем, что значение у будет увеличиваться только примерно на каждом четвертом шаге по х. Начальное значение Нравно (-6). При каждом увеличении х мы делаем одно из двух: если значение функции ¥ отрицательно, то добавляем к ней 6; в противном случае вычитаем из нее 18 и увеличиваем у.


⇐ Предыдущая| |Следующая ⇒