
БАЗОВЫЕ РАСТРОВЫЕ АЛГОРИТМЫ.ppt
- Количество слайдов: 22
БАЗОВЫЕ РАСТРОВЫЕ АЛГОРИТМЫ
Типовая графическая система CPU Графический конвейер Буфер кадра Растеризатор Простейшие растровые алгоритмы графических библиотек обеспечивают: 1. Переведение идеального объекта (отрезка, окружности и др. ) в их растровые образы; 2. Обработку растровых изображений.
Примитивы: • Точки • Линии • Прямоугольники (со сторонами, параллельными границам экрана) • Многоугольники • Шрифты • Заливка областей • Плоское отсечение
Переведение идеального объекта в их растровые образы ? а) б) Рис. 1 Разложение в растр отрезков прямых Связность − возможность соединения двух пикселов растровой линией (то есть последовательным набором пикселей).
Связность: 4 -связность: x 1 -x 2 + y 1 -y 2 1 ; 8 -связность: x 1 -x 2 1, y 1 -y 2 1, 4 -связные алгоритмы проще, но они генерируют менее качественное изображение линий за большее количество тактов работы. Для приведенного примера 4 -связный алгоритм работает 10 тактов, а 8 -связный — только 7.
Растровое представление отрезка Процесс определения пикселов, наилучшим образом аппроксимирующих заданный отрезок, называется разложением отрезка в растр. Отрезки должны удовлетворять следующим требованиям: • Должны выглядеть прямыми, начинаться и заканчиваться в заданных точках. • Яркость вдоль отрезка должна быть постоянной и не зависеть от длины и наклона. • Алгоритмы рисования должны быть простыми и быстрыми.
Метод прямого вычисления координат Общая схема алгоритма вывода отрезка прямой линии
Достоинства прямого вычисления координат: 1. Простота, ясность построения алгоритма. 2. Возможность работы с нецелыми значениями координат отрезка. Недостатки: 1. Использование операций с плавающей точкой или целочисленных операций умножения и деления обуславливает маленькую скорость. 2. При вычислении координат добавлением приращений может накапливаться ошибка вычислений координат.
Метод цифрового дифференциального анализатора (ЦДА) y 2 -y 1 slope (x, y) x 2 -x 1
Метод цифрового дифференциального анализатора (ЦДА) Недостатки алгоритма: • Использует вещественную арифметику, что приводит к значительным затратам вычислительных ресурсов. • Может быть активизирован пиксел, стоящий за концом отрезка, и если рисуется ломаная, то данный пиксел будет высвечиваться 2 раза.
Алгоритм Брезенхема (метод центральной точки) y (x 2, y 2) (x, y) (x 1, y 1) точка (x, y) «выше» прямой x точка (x, y) «лежит» на прямой точка (x, y) «ниже» прямой
NE f(x, y) M(x+1, y+1/2) P(x, y) E Подставляем точку M в функцию f: • если f(M) > 0 выбираем точку NЕ • если f(M) <= 0 выбираем точку Е
1) Если 2) Если , то , и тогда ; и тогда.
,
Procedure Bresenham(x 1, y 1, x 2, y 2, Color: integer); var dx, dy, incr 1, incr 2, d, x, y, xend: integer; begin dx: = ABS(x 2 -x 1); dy: = Abs(y 2 -y 1); d: =2*dy-dx; {начальное значение для d} incr 1: =2*dy; {приращение для d<0} incr 2: =2*(dy-dx); {приращение для d>=0} if x 1>x 2 then {начинаем с точки с меньшим знач. x} begin x: =x 2; y: =y 2; xend: =x 1; end else
begin x: =x 1; y: =y 1; xend: =x 2; end; Put. Pixel(x, y, Color); {первая точка отрезка} While x<xend do begin x: =x+1; if d<0 then d: =d+incr 1 {выбираем нижнюю точку} else begin y: =y+1; d: =d+incr 2; {выбираем верхнюю точку, y-возрастает} end; Put. Pixel(x, y, Color); end; {while} end; {procedure}
f(x, y) NE ME(x+2, y+1/2) M P(x, y) MNE(x+2, y+3/2) E Подставляем точку M в функцию f: • если f(M) > 0 выбираем точку NЕ • если f(M) <= 0 выбираем точку Е Изменения значения f(M) при переходе к новым точкам (E или NE):
Известны приращения f. f(x, y) M 0(x+1, y+1/2) P 1(x 1, y 1) Найдем первоначальное значение для точки (x 1, y 1)
Сохранились вещественные числа. Сделаем замену: 2 f = e Тогда помеченные строки изменяться на: e = 2 * dy - dx; e > 0 e = e + 2 * dy - 2 *dx; e = e + 2 * dy и e – целое число.
Line: Алгоритм с использованием Fixed Point – вещественные числа Fixed Point (DDA) с фиксированной точкой. Рассмотрим 4 -байтное целое: 2 b целая часть 2 b дробная часть Точность 1/65536 Если x и y fixed point, то • сложение не изменяется (x+y) • вычитание не изменяется (x-y) • целая часть – «двоичный сдвиг» вправо на 16 бит (x >> 16) • из целого: x = a << 16
БАЗОВЫЕ РАСТРОВЫЕ АЛГОРИТМЫ.ppt