Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Book_Sidenko.doc
Скачиваний:
1
Добавлен:
22.02.2020
Размер:
6.28 Mб
Скачать

3.9. Заполнение области Алгоритм построчного сканирования

Рис. 3.21

Есть область, граница которой разложена в растр. Требуется: заполнить область внутри. Пусть внутри задана точка “boundary” — значение граничных . “old” – значение внутри области до заполнения. “new” – значение внутри области новое.

Объект заключается в прямоугольную оболочку и проверяется принадлежность объекту.

Проводится построчное сканирование. Находится со значением “boundary”, , следующий за ним и имеющий значение “old” меняется на “new” и так до тех пор, пока не будет встречен еще один со значением “boundary”. После этого осуществляется переход на следующую строку.

Рис. 3.22

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

Метод заполнения с затравкой

Область называется 4-хсвязной, если из любой внутренней т. можно достичь любой другой т., двигаясь в одном из 4-х направлений.

4-х связная обл. 8-связная обл.

Рис. 3.23

Алгоритм:

  1. Поместить затравочный в стек.

  2. Пока стек не пуст:

а) извлечь из стека;

б) присвоить требуемое значение;

в) для каждого из соседних 4-хсвязных проверить:

  • является ли он граничным;

  • не присвоено ли требуемое значение.

г) проигнорировать в любом из этих двух случаев.

иначе поместить в стек.

Пример:

Рис. 3.24

Стек

0 11 12 13

1 10 2

2 3

3 2 14

4 5 13 15 14 16

6 3 1 17

7 8 3 5 18 17 16

9 10

Заполнение линиями

Для заданной т. (x,y) определяется и заполняется максимальный отрезок, содержащий эту т. и лежащий внутри области. Потом в поисках еще не заполненных проверяются отрезки, лежащие выше и ниже. Если такие находятся, то функция рекурсивно вызывается дальше. Алгоритм эффективен и для областей с отверстиями.

3.10. Разложение в растр сплошных многоугольников

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

Когерентность сканирующих строк

В самом простом случае, чтобы определить , которые надо закрасить, нужна проверка каждого на принадлежность многоугольнику (все экрана).

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

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

Рис. 3.25

На этом и основан принцип пространственной когерентности:

  • перемещаясь от к или от одной сканирующей строки к другой, многоугольник чаще всего остается постоянным.

Используя этот принцип, можно предположить следующий алгоритм:

    • Определить точки пересечения текущей сканирующей строки со сторонами многоугольника.

    • Сортировать т. пересечения по увеличению x – координаты.

    • Попарно закрасить.

Рассмотрим строку 2: строка 6:

  1. т. пересечения: 3,6 1) 8,6,3,1

  2. сортировка: 3,6 2) 1,3,6,8

  3. закраска: 3-6 3) 1,-3,6,-8

строка 3: строка 5:

  1. 2,8,8 1) 8,4,4,1

  2. 2,8,8 не верно! 2) 1,4,4,8 верно!

  3. 2,-8,8 – правая граница буфера 3) 1,-4,4,-8

Чтобы алгоритм работал верно, во всех случаях поступают следующим образом:

Все вершины разбивают на 2 типа:

  1. промежуточные (1,3)

  2. локальные и глобальные экстремумы (2,5,6,4).

Если вершина является промежуточной, то одно из ребер, ее составляющих, уменьшается на 1 по y.

Тогда для строки 3: (ребро е3 укоротили на 1, появилась вершина 31)

  1. 2,8

  2. 2,8

  3. 2,-8

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