Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
12260.pdf
Скачиваний:
125
Добавлен:
29.03.2016
Размер:
1.6 Mб
Скачать

Компьютерная графика.

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

Вместо того чтобы хранить в памяти точки пересечения контура с каждой строкой растра, ограничимся лишь одной строкой - текущей. А именно, организуем список "активных" ребер (САР), в котором будем хранить информацию обо всех ребрах многоугольника, пересекаемых текущей строкой. Удобство такого подхода в том, что при переходе к новой строке не требуется полностью переформировывать САР. Достаточно лишь удалить из него "закончившиеся" ребра (то есть ребра из САР, чей нижний конец оказался выше нового значения y ) и добавить вновь появившиеся.

Заливка с затравкой.

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

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

Простейший алгоритм заполнения с затравкой - это так называемый алгоритм короеда, получивший подобное название, поскольку заполняемая область последовательно "выедается" по одному пикселю. Алгоритм схематично изображен на рис. 29. Пример заливки области можно увидеть на рис. 30.

Рисунок 29: Алгоритм заливки.

Рисунок 30: Поэтапное заполнение

 

 

области.

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

пиксели в строке меняются только на границах;

-45-

Компьютерная графика.

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

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

Последовательность работы алгоритма следующая:

1.Координата затравки помещается в стек, затем до исчерпания стека выполняются пункты 2-4.

2.Координата очередной затравки извлекается из стека и выполняется максимально возможное закрашивание вправо и влево по строке с затравкой, т.е. пока не попадется граничный пиксель. Пусть это ХLeft и ХRight, соответственно.

3.Анализируется строка ниже закрашиваемой в пределах от ХLeft до ХRight и в ней находятся крайние правые пиксель всех не закрашенных фрагментов. Их координаты заносятся в стек.

4.То же самое проделывается для строки выше закрашиваемой.

Рисунок 31: Поэтапное заполнение области модифицированным алгоритмом "короеда"

-46-

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