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

17. Развертка сплошных областей. Алгоритмы построчной развертки и заполнения с затравкой.

Заполнение сплошных областей

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

1) построчные методы растровой развертки;

2) методы растровой развертки с затравочным заполнением.

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

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

Построчная растровая развертка областей

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

Координаты углов охватывающего прямоугольника определяются максимальными и минимальными значениями координат X и Y рассматриваемого контура.

Для того чтобы эффективно реализовать процедуру развертки сплошной области, необходимо воспользоваться двумя дополнительными процедурами:

1) определение когерентности растровых строк;

2) сортировка.

Под когерентностью - пространственная однородность характеристик пиксела в сканируемой строке. Изменение характеристик пиксела свидетельствует о достижении границы контура.

Как правило, на практике описание ломаной линии контура хранится в неупорядоченном виде. Если многоугольник задан ребрами, то точки пересечений строки растровой развертки будут располагаться не упорядоченно. Чтобы получить координаты интервала заполнения строки в растре развертки, необходимо выполнить сортировку множества точек пересечения < x1, x2, x3, x4 >.

Таким образом, алгоритм выполнения сортировки - неотъемл часть ядра базовой графической сист.

При выполнении построения растровой развертки особой обработки требуют вершины многоугольного контура. Возможны два случая:

1) в том случае, если вершина контура является локальным экстремумом, то она учитывается в списке два раза (например, P5);

2) в противном случае, она учитывается один раз (например, P3).

Для повышения эффективности вычислительной процедуры сортировки по строкам и сортировки в строке выполняются раздельно.

Простейшим вариантом алгоритма данной группы является алгоритм с упорядоченным списком ребер. Он состоит из двух частей:

1) подготовительная;

2) собственно развертка.

Данный алгоритм является простым и очевидным, однако требует большого объема памяти. Для ускорения вычисления и уменьшения объема памяти используется:

1) структурирование данных в виде связного списка ребер;

2) вычисление координат точек пересечения в пошаговом режиме.

На использовании данных приемов базируется вариант алгоритма растровой развертки сплошных областей - алгоритм с активным списком ребер: (САК). Алгоритм также состоит из двух частей: подготовительной и растровой развертки.

Алгоритм, использующий САК, независим от устройств ввода – вывода, однако имеет повышенную сложность из-за использования в нем списочных структур и их обработки. Кроме того, наличие такой гибкой структуры данных, как списки, не позволяет выполнять аппаратную реализацию алгоритма со списком активных ребер. Для повышения эффективности алгоритма используется модернизированный вариант, в котором кроме САК используется признак переключения “вне внутри” замкнутого контура (сокращенно ФЛАГ). Алгоритм также выполняется за 2 этапа:

1. Обрисовка контура.

2. Заполнение внутреннего пространства контура.

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

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

1) по характеру границ:

- внутренне определенные;

- гранично определенные;

2) по характеру связности внутренних точек области:

- четырехсвязные;

- восьмисвязные.

Граничноопределенные области, в отличие от внутренне определенных, имеют на границе области пиксели выделенного цвета (контур). Связность областей определяется количеством направлений перемещения внутри заполняемой области (4 или 8).

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

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