Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 1_р.doc
Скачиваний:
12
Добавлен:
11.03.2015
Размер:
581.63 Кб
Скачать

Закраска гранично-связной области

Существует несколько алгоритмов закраски такой области. Рассмотрим два из них.

  1. Использует рекурсию. Метод прост для программирования, однако крайне неэффективен. От затравочной точки просматривают все точки. Если они не граничные, закрашивают и посылают в стек. Далее вытаскивают из стека, и если точка не является граничной и закрашенной, делают то же самое. См. блок-схему рис.2.9.3.

рис. 2.9.3.

Рис. 2.9.4.

Алгоритм закраски областей, заданных списком вершин

(метод построчного сканирования)

Интерполяция яркости при закраске областей

О линейной интерполяции яркости при закраски области можно говорить, если закрашиваемая фигура плоская т.е. лежит в одной плоскости, например (ХУ).

Рис. 2.9.5.

Плоскость определяется по трём точкам:

Рис. 2.9.6.

|| || - определитель матрицы;

A·x + B·y + D A В D

V = - ¾¾¾¾¾¾¾ = a·x + b·y + g, где a = - ¾, b = - ¾ , g = - ¾;

C С C C

V = V1 + α (х - х1)+β (у - у1), где

V – яркость в произвольной точке, V1 – яркость известная.

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

Рис.2.9.7.

Сначала находят ymax и ymin. Далее для текущей у-координаты находят крайнее левое и крайнее правое ребро. Начинают с крайнего левого ребра: идут вправо (и закрашивают соответствующие точки) до пересечения со следующим ребром. Также необходим анализ на наличие локальных экстремумов. В этих точках режим закраски не меняется.

Алгоритм работает с помощью 2-х таблиц:

  1. таблица ребер (ТР);

  2. таблица активных ребер (ТАР);

В ТР заносятся все ребра, а в ТАР лишь те ребра, которые мы пересекаем.

Составление ТР:

Все ребра делятся на группы по нарастанию у-координаты, а внутри группы рёбра упорядочиваются в соответствии с нарастанием хнач. Ребро в таблицу заносится только 1 раз, горизонтальные ребра игнорируются.

A (1, 2)

B (4, 8)

C (8, 6)

D (7, 2)

E (5, 4)

Таблица рёбер:

Группа, №

Ребро

ymin

ymax

хНАЧ

хКОН

∆x

VНАЧ

VКОНЕЧ

∆V

1

АВ

2

8

1

4

0.5

АЕ

4

1

5

2

DC

6

7

8

0.25

DE

4

7

5

-1

2

CB

6

8

8

4

-2

хКОН ¾ хНАЧ VКОНЕЧ ¾ VНАЧ

Dх = ¾¾¾¾¾¾; DV = ¾¾¾¾¾¾¾;

ymax ¾ ymin ymax ¾ ymin

Алгоритм

  1. Сформировать ТР и подготовить ТАР

  2. Выбор первой координаты сканируемой строки: у = min {ymin};

  3. Если у = уmin, то перенос группы из ТР в ТАР.

Таблица активных ребер (ТАР)

Ребро

уНАЧ

хНАЧ

∆х

VНАЧ

∆V

AB

2

1

0.5

AE

2

1

2

DC

2

7

0.25

DE

2

7

-1

4. Упорядочивание ребер в ТАР по возрастанию хНАЧ.

5. Сканирование (проводят сканирующую строку). а) переключение режимов по хНАЧ

б) учёт прохождения через вершины – локальные экстремумы. Если точка – локальный экстремум, то режим следует сохранить. Для отслеживания данной ситуации можно включить в ТР уmax, при совпадении необходим дополнительный анализ.

в) проводить линейную интерполяцию яркости при закраске от (хНАЧ , VНАЧ)i до (хНАЧ , VНАЧ)i+1

6. Удалить из ТАР те ребра, для которых справедливо у = уmax

7. Для всех элементов в ТАР произвести: хНАЧ = хНАЧ + ∆х; VНАЧ = VНАЧ + ∆V;

8. Переход к следующей сканирующей строке: y=y+1;

9. Проверка на окончание: если y>max{уmax}, то конец, иначе осуществить переход к п.3).

3. Геометрические преобразования

3.1. Координаты и преобразования

Описание, конструирование, манипулирование и представление геометрических объектов являются центральными работами в графических системах. Их поддержка в требуемом объеме за счет соответствующих математических методов, алгоритмов и программ оказывают существенное влияние на возможности и эффективность графической системы. В данном разделе будут рассмотрены математические методы для описания геометрических преобразований координат в двух и трехмерном случае, будут обсуждены некоторые вопросы эффективности, рассмотрены геометрические преобразования растровых картин.

Далее большими буквами x, y, z будут обозначаться обычные декартовые координаты, а маленькие буквы X, Y, Z будут использоваться для обозначения т.н. однородных координат.

3.2. Двумерные геометрические преобразования

Параллельный перенос

Параллельный перенос в плоском случае имеет вид:

x` = x + Dx

y` = y + Dy

[x’, y’] = [x, y] + [Dx, Dy]

P’ P T

или в векторной форме:

P` = P + T,

где P` = [x` y`] - вектор-строка преобразованных координат,

где x, y - исходные координаты точки, Tx, Ty - величина сдвига по осям, x`, y` - преобразованные координаты. P = [x y] -- вектор-строка исходных координат, P` = [x` y`] -- вектор-строка преобразованных координат, T = [Tx Ty] -- вектор-строка сдвига.

Масштабирование

Преобразование масштабирования относительно начала координат имеет вид:

x` = x ·Sx

y` = y ·Sy или

Sx 0

[x`, y`] = [x, y] ·

0 Sy

P` P

S

или в матричной форме:

P` = P ·S,

где Sx, Sy -- коэффициенты масштабирования по осям, а

S - матрица масштабирования

Поворот

Преобразование поворота относительно начала координат имеет вид:

x`= x·cos(φ) – y·sin(φ)

y`= x·sin(φ) + y·cos(φ)

или

cos(φ) sin(φ)

[x`, y`] = [x, y] ·

–sin(φ) cos(φ)

P` P

R

Где R – матрица поворота

φ – положительный угол поворота

или в матричной форме:

P` = P ·R,

Столбцы и строки матрицы поворота представляют собой взаимно ортогональные единичные векторы. В самом деле квадраты длин векторов-строк равны единице:

cos·cos+sin·sin = 1

(-sin) ·(-sin)+cos·cos = 1,

а скалярное произведение векторов-строк есть

cos·(-sin) + sin·cos = 0.

Так как скалярное произведение векторов A ·B = A ·B ·cos, где A - длина вектора A, B - длина вектора B, а  - наименьший положительный угол между ними, то из равенства скалярного произведения двух векторов-строк длины 1 следует, что угол между ними равен 90.

Аналогичное можно показать и для векторов-столбцов. Кроме того вектора-столбцы представляют собой такие единичные векторы, которые после выполнения преобразования, заданного этой матрицей, совпадут с осями. В самом деле, произведение первого столбца на матрицу есть

cos

-sin

·

cos

sin

=

1 0

,

-sin

cos

т.е. это единичный вектор вдоль оси X.

Аналогично, произведение второго столбца на матрицу даст вектор [ 0 1 ]. Это позволяет сформировать матрицу, если известны результаты преобразования.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]