Базовые растровые алгоритмы.

Большинство графических устройств являются растровыми, представляя изображение в виде прямоугольной матрицы (сетки, целочисленной решетки) пикселей (растра), и большинство графических библиотек содержат внутри себя достаточное количество простейших растровых алгоритмов. На рисунке приведена система растровых алгоритмов.

Базовые растровые алгоритмы. - student2.ru

Алгоритмы растеризации.

Связность – возможность соединения двух пикселей растровой линией, т. е. последовательным набором пикселей.

1. Четырехсвязность: пиксели считаются соседними, если либо их x-координаты, либо их y – координаты отличаются на единицу: Базовые растровые алгоритмы. - student2.ru .

2. Восьмисвязность: пиксели считаются соседними, если их x-координаты и y-координаты отличаются не более чем на единицу: Базовые растровые алгоритмы. - student2.ru , Базовые растровые алгоритмы. - student2.ru .

При переводе объектов в растровое представление существуют, алгоритмы, как использующие четырехсвязность, так использующие восьмисвязность.

Растровое представление отрезка.

Рассмотрим задачу построения растрового изображения отрезка, соединяющего точки Базовые растровые алгоритмы. - student2.ru и Базовые растровые алгоритмы. - student2.ru . Для простоты будем считать, что Базовые растровые алгоритмы. - student2.ru . Тогда отрезок описывается уравнением: Базовые растровые алгоритмы. - student2.ru или Базовые растровые алгоритмы. - student2.ru .

Отсюда получаем простейший алгоритм растрового представления отрезка:

void line(int xa, int ya, int xb, int yb, int color){

double k = ((double)(yb – ya)) / (xb – xa);

double b = ya – k * xa;

for (int x = xa; x <= xb; x++)

putpixel(x, (int)(k * x + b), color);

}

Приведенный простейший пошаговый алгоритм построения отрезка имеет ряд недостатков:

1. Выполняют операции над числами с плавающей точкой, а желательно было бы работать с целочисленной арифметикой;

2. На каждом шаге выполняется операция округления, что также снижает быстродействие.

Эти недостатки устранены в следующем алгоритме Брезенхейма.

Алгоритм Брезенхейма.

Как и в предыдущем случае, будем считать, что тангенс угла наклона отрезка принимает значение в диапазоне от 0 до 1. Рассмотрим i-й шаг алгоритма (см. рисунок). На этом этапе пиксель Базовые растровые алгоритмы. - student2.ru уже найден как ближайший к реальному отрезку. Требуется определить, какой из пикселов ( Базовые растровые алгоритмы. - student2.ru или Базовые растровые алгоритмы. - student2.ru ) будет установлен следующим.

Базовые растровые алгоритмы. - student2.ru

В алгоритме используется управляющая переменная Базовые растровые алгоритмы. - student2.ru , которая на каждом шаге пропорциональна разности между S и T. Если S<T, то Базовые растровые алгоритмы. - student2.ru ближе к отрезку и выбираем ее, иначе выбирается Базовые растровые алгоритмы. - student2.ru .

Пусть изображаемый отрезок проходит из точки Базовые растровые алгоритмы. - student2.ru в точку Базовые растровые алгоритмы. - student2.ru . Исходя из начальных условий, точка Базовые растровые алгоритмы. - student2.ru ближе к началу координат. Тогда перенесем оба конца отрезка, так чтобы первый конец отрезка совпал с началом координат. Начальной точкой отрезка стала точка (0, 0), конечной точкой стала (dx, dy), где Базовые растровые алгоритмы. - student2.ru , Базовые растровые алгоритмы. - student2.ru .

Базовые растровые алгоритмы. - student2.ru

Итеративная формула вычисления управляющего коэффициента Базовые растровые алгоритмы. - student2.ru по предыдущему значению Базовые растровые алгоритмы. - student2.ru имеет вид: Базовые растровые алгоритмы. - student2.ru . {Вычисляется она из подобия треугольников: Базовые растровые алгоритмы. - student2.ru Базовые растровые алгоритмы. - student2.ru Базовые растровые алгоритмы. - student2.ru .

Находим T, как Базовые растровые алгоритмы. - student2.ru Базовые растровые алгоритмы. - student2.ru Базовые растровые алгоритмы. - student2.ru Базовые растровые алгоритмы. - student2.ru Базовые растровые алгоритмы. - student2.ru

Помножим левую и правую часть этого выражение на dx. И заменяем Базовые растровые алгоритмы. - student2.ru , Базовые растровые алгоритмы. - student2.ru , Базовые растровые алгоритмы. - student2.ru = Базовые растровые алгоритмы. - student2.ru }.

С помощью управляющего коэффициента выбирается следующий пиксель Базовые растровые алгоритмы. - student2.ru или Базовые растровые алгоритмы. - student2.ru .

Если Базовые растровые алгоритмы. - student2.ru , тогда выбирается Базовые растровые алгоритмы. - student2.ru и Базовые растровые алгоритмы. - student2.ru , Базовые растровые алгоритмы. - student2.ru .

Если Базовые растровые алгоритмы. - student2.ru , тогда выбирается Базовые растровые алгоритмы. - student2.ru и Базовые растровые алгоритмы. - student2.ru , Базовые растровые алгоритмы. - student2.ru .

Начальные значения Базовые растровые алгоритмы. - student2.ru , т.к. Базовые растровые алгоритмы. - student2.ru .

Преимуществом алгоритма является то, что для работы алгоритма требуются минимальные арифметические возможности: сложение, вычитание и сдвиг влево для умножения на 2.

Если dy>dx, то необходимо будет использовать этот же алгоритм, но пошагово увеличивая y и на каждом шаге вычислять x.

Наши рекомендации