Скачиваний:
93
Добавлен:
09.05.2014
Размер:
37 Мб
Скачать
☆

11.10.02

Лекция 6

EGA. Постановка точки.

(EGA 640x350, VGA 640x480).

Адрес байта = Y*80 + целое(X/8).

Положение бита в байте определяется , как в ч/б CGA.

VGA 256 цветов.

Адрес байта = Y*N+X, где N – размер изображения по горизонтали (ширина изображения в пикселях).

Горизонтальные и вертикальные линии.

Вертикальные линии:

PUTPIXEL – такое построение не обеспечивает достаточную скорость. Мы должны строить линию работая с байтами и битами, то есть непосредственно в ВП, что намного ускоряет построение линии, в отличии от данного метода.

0

Адрес байта для четных строк

1

+2000h

Получаем нечетную строку

2

+2000h +5h (+80)

Снова получаем четную строку

3

+2000h

Снова получаем нечетную строку



Горизонтальные линии:

Нужно каждый раз проверять, не закончился ли байт  нужно циклически сдвигать маску. Надо каждый раз при построении горизонтальной линии проверять, не перешли ли мы через границу байта. Если границу перешли , то к адресу байта надо добавлять 1. при определении перехода через границу байта проверяем, есть ли целые байты в оставшейся части линии  делим оставшуюся длину линии на 8 и смотрим целую часть и если есть целый байт мы пишем FFh (11111111). Оставшуюся нецелую часть линии строим как и в начале по точкам.

Произвольные линии.

Координаты концов линии задаем целочисленно.

Предположим: Х1>Х2, и α ≤450. Будем продвигать значение координаты Х от Х1 до Х2 и находить для каждой координаты Х значение Y. (Если α >450, то надо для Y находить Х). Y=m*X+b m=tg α m=|Y2-Y1|/| X2-X1|. Для обеспечения необходимой точности нужно работать с плавающей точкой и каждый раз производить округление Y. На каждом шаге координата Х меняется на 1, в этом случае Y меняется на m (исчезает операция умножения: Хi+1=Xi+1  Yi+1=Yi+m ).

Брезенхэм:

T или S – какая из них следующая? Если Ti >= Si S (координата Y не меняется), Ti < Si T (координата Y меняется Yi+1=Yi+-1).

Алгоритм построения Брезенхэма: он ввел некоторую переменную di=(s-t). Если di<0, то Yi+1=Yi и следующее значение di находится так: di+1= di+2 dy (2) (dy=|Y2 – Y1|), еслиdi ≥ 0, тогда Yi+1=Yi+-1 и следующее значение di: di+1= di – 2*( dy - dх) (3) гдеdy=|Y2 – Y1|,dх=|Х2 – Х1|. Начальное значениеdi определяется по формуле: : d1= 2 dy - dх (1) .

Примеры: В случае горизонтальной линии d1= 2 dy (=0) - dх <0  Y=const.

Если α >450 , тогда меняем на каждом шаге на 1 координату Y и используем те же формулы для определения di , но в котором dx и dy поменяны местами. Достоинство алгоритма – это сложение и сдвиги, используется целочисленная арифметика и точность построения линии не более 0,5 пикселя.

Пример:

di

Х

Y

5

5

-1

6

5

5

7

5

-3

8

6

3

9

6

-5

10

7

1

11

8

-7

12

8

18.10.02

Лекция 7

Вывод окружностей и символов на экране.

Окружность строится октантом (1/8 частью)

Для каждого значения Х мы можем менять координату Хi и каждый раз находить координату Yi

Проблемы:

  1. Надо искать квадраты.

  2. Извлечение квадратного корня – долгая операция.

  3. Требуется работа с вещественными числами.

  4. Требуется округление.

Алгоритм построения Брезенхэма: Строим окружность в октанте, пока Хi не станет ≥ Yi.

d1=3 – 2*R

di<0  Si (Y=const)  di+1= di+4*Xi-1+6

di≥ 0  Ti (Yi= Yi-1+-1)  di+1= di+4*(Xi-1 - Yi-1)+10

Алгоритм построения Стародубцева (ЛИТМО):

1. На каждом шаге находим сумму Xi и сравниваем эти значения с координатой Y. Если сумма Xi ≥Y, то координату Y меняем и находим новое значение суммы: ∑Х = ∑Х - Yi

Пример: Алгоритм ЛИТМО.

Х

Y

∑Х

0

10

0

1

10

1 (0+1)< Y10

2

10

3 (1+2)< Y10

3

10

6 (3+3)< Y10

4

9

10 (6+4) ≥ Y10

0 (10-10) Новое значение суммы

5

9

5 (0+5)< Y9

6

8

11(5+6) ≥ Y9

2 (11-9) Новое значение суммы

7

7

9 (2+7) ≥ Y8

Х=Y

Алгоритм закончен

Сложение: 1-2 операции, сравнивание: 1 операция, в сумме: 2-3 операции. (Алгоритм ЛИТМО).

Сложение: 2-3 операции, сравнивание: 1 операция, сдвиги: 2 операции, в сумме: 5-6 операций. (Алгоритм Брезенхэма).

Анализ алгоритма ЛИТМО показал, что точность уступает алгоритму Брезенхэма (=0,6 пикселя).

Модифицированный алгоритм для повышения точности:

Надо сравнивать не с Y, а с Y/2  в сумме: 3-4 операции (появилась операция сдвига (деления)).

Соседние файлы в папке конспект лекций