Обобщение алгоритма Брезенхема.



Лекции 5. Алгоритмы растрово-векторной графики.

Растр и вектор.

Основа растрового дисплея – растр – упорядоченная сетка пикселей. Каждое изображение непрерывно: фотография, рисунок и т.д., представляет собой множество точек, линий, сплошных областей. Т.к. растр – матрица дискретных элементов (пикселей), то любое непрерывное изображение нельзя абсолютно точно изобразить на растровом экране => необходима аппроксимация (приблизительное описание).

Растрирование (разложение в растр) – процесс определения пикселей, наилучшим образом аппроксимирующих непрерывное изображение. Процесс разложения в растр тесно связан с процессом визуализации изображения (растровая развертка).

 

Основными рассматриваемыми векторными примитивами являются:

Точка

Отрезок (прямая)

Дуга (эллипс, окружность)

Закраска замкнутой области (растровая развертка треугольника)

Текст (шрифты растровые и TT )

Алгоритмы вывода точки . Адрес в Буфере Кадра:
А=( Y * H + X )*РазмерЦвета [A]=C заносим цвет точки.

Алгоритмы развертки отрезков.

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

Алгоритмы симметричны по X <-> Y от угла наклона прямой <45°

Алгоритм проведения отрезка “ в лоб”.

 - уравнение прямой

; [1]     - tg угла наклона

x: x1...x2 с шагом 1

y: рассчитывается  y=Round( [1] )

При увеличении угла наклона появляются разрывы (Dx=1, Dy>1), т.е. при m<1 (угол < 45) используем [1], при m>1 (угол > 45), обратаная зависимость:

[2]

y: y1...y2 с шагом 1

x: рассчитывается  x=Round( [ 2 ] )

Недостатки: операции умножения, деления и дробная арифметика.

Данный алгоритм практически не используется.

 

Алгоритм Цифрового Дифференциального Анализатора.

 (const)  ;

Dx и Dy для отрезка постоянны.

, где       

Xni = Round(Xi)  Yni = Round(Yi)

Недостатки: работа с дробными числами. Данный алгоритм используется как основа для следующих алгоритмов растровой развертки.

Целочисленный алгоритм Брезенхема.

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

 

 

Оговорки:

m = (0..1); x2 > x1; (x1,y1) = (0,0); (x1,y1) ¹ (x2,y2)

 

Dx = 1 – всегда, Dy = {

    

{ Алгоритм Брезенхема }   Begin {для углов меньше 45} dX:=X2-X1; dY:=Y2-Y1; S:=dX div 2; Y:=Y1;   For X:=X1 to X2 do begin    PutPixel(X,Y,Color);       S:=S-dY;    IF S<0 then begin        Y:=Y+1; S:=S+dX;    end;   end; End.

 - Определитель

Для упрощения вычислений вводят:

шаг (от инкремент)

 необходимо определить лишь одно значение d

x1 = 0, y1 = 0; Dx = 1, x2 = 1

{ Проверка алгоритма Брезенхема }   начало:(1,1); конец:(10,6)   dX=10-1=9 dY=6-1=5 S=9div2=4  
X Y S до S после inc
1 1 4-5=-1 8 +1
2 2 8-5=+3    
3 2 3-5=-2 7 +1
4 3 7-5=+2    
5 3 2-5=-3 6 +1
6 4 6-5=+1    
7 4 1-5=-4 5 +1
8 5 5-5=+0    
9 5 0-5=-5 4 +1
10 6 4-5=-1 8 +1

 

d2 = 2Dy(x2-x1) - 2Dx(y1–y0) - Dx = 2Dy - Dx

 

Обобщение алгоритма Брезенхема.

Были ограничения:

1. m < 1 (угол < 45); при m = 1..¥ - надо поменять x и y

2. x1=0, y1=0; смещение

I квадрант:

x1=1, x2=5 Dx=4 “+”

y1=1, y2=3 Dy=2 “+”

(+1, +1v0) - приращение

II квадрант:

x1=3, x2=1 Dx=-2 “-”

y1=1, y2=4 Dy=3 “+”

(-1, +1v0) - приращение

III квадрант:

x1=5, x2=1 Dx=-4 “-”

y1=3, y2=1 Dy=-2 “-”

(-1, -1v0) - приращение

IV квадрант:

x1=1, x2=3 Dx=2 “+”

y1=4, y2=1 Dy=-3 “-”

(+1, -1v0) - приращение

Sx = sign(x2-x1) =

Sy= sign(y2-y1)

В алгоритме нужно заменить:

Inc(x) на

Inc(y) на

Dx = x2 – x1 на Dx = |x2 – x1|

Dy = y2 – y1 на Dy = |y2 – y1|

 


Дата добавления: 2020-11-15; просмотров: 248; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!