русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2013-12-23; просмотров: 3922; Нарушение авторских прав


Алгоритм со списком ребер и флагом

 

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

 

1) обрисовка контура: используя соглашения о середине интервала между сканирующими строками для каждого ребра, пересекающего сканирующую строку, отметить самый левый пиксель, центр которого лежит справа от пересечения; т.е. X+1/2>Xпересечения;

2) заполнение: для каждой сканирующей строки, пересекающей многоугольник:

Внутри = false

for X=0 (левая граница) to X=Xmax (правая граница)

if пиксель в точке X имеет граничное значение

then инвертировать значение переменной Внутри

if Внутри = true

then присвоить пикселю в X значение цвета многоугольника

else

присвоить пикселю в X значение цвета фона

end if

next X

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

 

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

Рассмотрим алгоритм заполнения с затравкой, использующий стек. Стек - это просто массив или другая структура данных, в которую можно последовательно помещать значения и из которой их можно последовательно извлекать. Когда новые значения добавляются или помещаются в стек, все остальные значения опускаются вниз на один уровень. Когда значение удаляется или извлекается из стека, остальные значения всплывают или поднимаются вверх на один уровень. Такой стек называется стеком прямого действия или стеком с дисциплиной обслуживания FILO (первым пришёл, последним обслужен). Начнем с того, что поместим затравочный пиксель в стек. Далее, пока стек не пуст, будем извлекать из него очередной пиксель и, закрасив его, будем изучать соседние с ним пиксели. Если среди них будут пиксели, не принадлежащие границе и не окрашенные нужным цветом, то поместим их в стек, после этого вернемся к операции извлечения пикселя из стека. По окончанию алгоритма все пиксели будут закрашены.



Формально же алгоритм можно записать так:

 

{c(X,Y) – цвет пикселя с координатами X,Y

cb – цвет границы

ci – цвет внутренней области

(X0,Y0) – координаты затравочного пикселя}

{помещаем X0,Y0 в стек}

while {стек не пуст} do

begin

{извлекаем пиксель X,Y из стека}

if (c(X,Y)<>ci) then c(X,Y):=ci;

for {для каждого соседнего пикселя X,Y} do

if (c(X,Y)<>cb) and (c(X,Y)<>ci) then

{поместить пиксель (X,Y) в стек}

end;

end.

 

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



<== предыдущая лекция | следующая лекция ==>
Алгоритм заполнения по ребрам | Основные методы устранения ступенчатости


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.