Студопедия — Алгоритмы закрашивания
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Алгоритмы закрашивания






 

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

– находим пиксел внутри контура фигуры;

– цвет этого пиксела изменяем на нужный цвет заполнения;

– производим анализ соседних пикселов;

– если цвет некоторого соседнего пиксела не равен цвету границы контура или цвету заполнения, то цвет этого пиксела изменяется на цвет заполнения;

– анализируем цвет пикселов, соседних с предыдущим. Продолжаем этот процесс, до тех пор, пока внутри контура все пикселы не перекрасятся в цвет заполнения.

Простейший алгоритм закрашивания. Для всех алгоритмов закрашивания необходимо задавать начальную точку с координатами x 0, y 0 внутри контура. Простейший алгоритм может быть описан следующим образом [21, 24].

1. Определить x 0, y 0.

2. Выполнить процедуру Закрасить (x 0, y 0).

Процедура Закрасить (x, y) описана в виде:

если цвет пиксела (x,y) не равен цвету границы, то

установить для пиксела (x,y) цвет заполнения;

закрасить(x+1, y);

закрасить(x-1, y);

закрасить(x, y+1);

закрасить(x, y-1).

Такое определение процедуры является рекурсивным. Рекурсия позволяет упростить запись некоторых алгоритмов.


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

Волновые алгоритмы закрашивания. Суть подобных алгоритмов состоит в том, что для начальной точки (вершины на графе) находятся соседние точки (другие вершины), которые отвечают двум условиям: во-первых, эти вершины связаны с начальной; во-вторых, они еще не отмечены, т.е. рассматриваются впервые.

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

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

Заполнение полигона. Контур полигона (в векторной форме) определяется вершинами, которые соединены отрезками прямых (рис. 9.6).

Один из наиболее популярных алгоритмов заполнения полигона заключается в закрашивании фигуры отрезками прямых горизонтальных линий. Алгоритм представляет собою цикл вдоль оси y, в ходе этого цикла выполняется поиск точек сечения линии контура с соответствующими горизонталями. Этот алгоритм имеет вид:

 

1. Найти min{yi} и max{yi} среди всех вершин Pi.

2. Выполнить цикл по y от y=min до y=max:

3. Найти точки пересечения всех отрезков контура с горизонталью y;

4. Координаты xj точек сечения записать в массив;

5. Отсортировать массив {xj} по возрастанию x;

6. Вывести горизонтальные отрезки с координатами

(x0, y) - (x1, y)

(x2, y) - (x3, y)

………………

(x2k, y) - (x2k+1, y)

Каждый отрезок выводится цветом заполнения.

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

При нахождении точек пересечения горизонтали с контуром необходимо принимать во внимание особые точки. Если горизонталь имеет координату y, совпадающую с yi вершины Pi, тогда надлежит анализировать то, как горизонталь проходит через вершину. Если горизонталь при этом пересекает контур (как, например, в вершинах P 0 или P 4), то в массив записывается одна точка сечения. Если горизонталь касается вершины контура (в этом случае вершина соответствует локальному минимуму или максимуму, как, например, в вершинах P 1, P 2, P 3 или P 5), тогда координата точки касания или не записывается, или записывается в массив два раза. Это условие четности числа количества точек пересечения, хранящихся в массиве { xj }.

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

Для определения координат (x) точек пересечения для каждой горизонтали необходимо перебрать все n отрезков контура. Координаты пересечения отрезка pi-pk с горизонталью равны:

x = xi + (yk - y)(xk - xi) / (yk - yi).

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

 

9.3. Сглаживание ступенчатости линий на изображении

 

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

Идеализированный образ математической линии имеет постоянную толщину (1 единицу). Такой образ построить невозможно. В чистом виде алгоритм Брезенхема предполагает, что за каждый шаг перемещения по оси x засвечивается только один пиксел. Но можно поступить по другому – засвечивать те пикселы, которые частично перекрываются идеальным образом линии, но задавать им не полную интенсивность, а частичную, пропорциональную степени перекрытия [24].

Контрольные вопросы и задания

1. В чем принцип алгоритма ЦДА?

2. За счет чего достигается быстродействие в алгоритме Брезенхема?

3. Какими способами осуществляется закраска областей?

4. Как устраняется ступенчатость на изображении в системах компьютерной графики?







Дата добавления: 2015-04-16; просмотров: 1006. Нарушение авторских прав; Мы поможем в написании вашей работы!



Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

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

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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...

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

РЕВМАТИЧЕСКИЕ БОЛЕЗНИ Ревматические болезни(или диффузные болезни соединительно ткани(ДБСТ))— это группа заболеваний, характеризующихся первичным системным поражением соединительной ткани в связи с нарушением иммунного гомеостаза...

Механизм действия гормонов а) Цитозольный механизм действия гормонов. По цитозольному механизму действуют гормоны 1 группы...

Алгоритм выполнения манипуляции Приемы наружного акушерского исследования. Приемы Леопольда – Левицкого. Цель...

ИГРЫ НА ТАКТИЛЬНОЕ ВЗАИМОДЕЙСТВИЕ Методические рекомендации по проведению игр на тактильное взаимодействие...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия