- •Алгоритмы компьютерной графики
- •1 . Генерация векторов
- •1.1. Цифровой дифференциальный анализатор (цда)
- •1.2. Алгоритм Брезенхема
- •З адание на лабораторную работу № 1 "Генерация векторов"
- •2. Фильтрация. М одифицированный алгоритм Брезенхема
- •2 .1. Модифицированный алгоритм Брезенхема
- •2.2. Улучшение качества изображения фильтрацией
- •З адание на лабораторную работу № 2 "Фильтрация. Модифицированный алгоритм Брезенхема "
- •3 . Алгоритмы генерации окружности
- •3.1. Целочисленный алгоритм Брезенхема
- •3.2. Алгоритм Мичнера для построения окружности
- •З адание на лабораторную работу № 3 "Алгоритмы генерации окружности"
- •4. Алгоритмы построчного заполнения м ногоугольников
- •З адание на лабораторную работу № 4 "Алгоритмы построчного заполнения многоугольников"
- •5. Заливка области с затравкой
- •5 .1. Заливка области с затравкой
- •5.2. Простой алгоритм заливки
- •5.3 Построчный алгоритм заливки с затравкой
- •З адание на лабораторную работу № 5 "Заливка области с затравкой "
- •6 . Алгоритмы отсечения отрезков
- •6.1. Двумерный алгоритм Коэна-Сазерленда
- •6.2. Двумерный fc-алгоритм
- •6.3. Алгоритм Кируса-Бека
- •6.3.1. Определение факта выпуклости многоугольника
- •6.3.2. Вычисление уравнения внутренней нормали
- •З адание на лабораторную работу № 6 "Алгоритмы отсечения отрезков"
- •7 . Алгоритмы отсечения многоугольников
- •7.1 Алгоритм Сазерленда-Ходжмена
- •7.2. Алгоритм отсечения многоугольников Вейлера-Азертона
- •З адание на лабораторную работу № 7 "Алгоритмы отсечения многоугольников"
- •Заключение
- •Оглавление
5.2. Простой алгоритм заливки
Рассмотрим простой алгоритм заливки гранично-определенной 4-х связной области. Заливка выполняется следующим образом:
определяется, является ли пиксел граничным или уже закрашенным;
если нет, то пиксел перекрашивается, затем проверяются и, если надо, перекрашиваются 4 соседних пиксела.
Ниже приведен итеративный алгоритм закраски 4-х связной гранично-определенной области. Логика работы алгоритма следующая:
поместить координаты затравки в стек;
пока стек не пуст;
извлечь координаты пиксела из стека;
перекрасить пиксел;
для всех четырех соседних пикселов проверить, является ли он граничным или уже перекрашен.
если нет, то занести его координаты в стек.
На рис. 5.3 а) показан выбранный порядок перебора соседних пикселов, а на рис. 5.3 б) – соответствующий ему порядок закраски простой гранично-определенной области.
a) Порядок перебора соседних пикселов |
б) Порядок заливки области |
Рис. 5.3. Заливка 4-х связной области итеративным алгоритмом
Рассмотренный алгоритм легко модифицировать для работы с 8-ми связными гранично-определенными областями или же для работы с внутренне-определенными.
Как уже отмечалось, очевидный недостаток алгоритмов, непосредственно использующих связность закрашиваемой области, – большие затраты памяти на стек, так как на каждый закрашенный пиксел в стеке по максимуму будет занесена информация о еще трех соседних. Кроме того, информация о некоторых пикселах может записываться в стек многократно. Это приведет не только к перерасходу памяти, но и потере быстродействия за счет многократной раскраски одного и того же пиксела.
5.3 Построчный алгоритм заливки с затравкой
Использует пространственную когерентность:
пикселы в строке меняются только на границах;
при перемещении к следующей строке размер заливаемой строки, скорее всего, или неизменен или меняется на 1 пиксел.
Таким образом, на каждый закрашиваемый фрагмент строки в стеке хранятся координаты только одного начального пиксела, что приводит к существенному уменьшению размера стека.
Последовательность работы алгоритма для гранично-определенной области следующая:
координата затравки помещается в стек;
координата очередной затравки извлекается из стека и выполняется максимально возможное закрашивание вправо и влево по строке с затравкой, т.е. пока не попадется граничный пиксел. Пусть это и соответственно.
Анализируется строка ниже закрашиваемой в пределах от до и в ней находятся крайние правые пикселы всех незакрашенных фрагментов. Их координаты заносятся в стек. То же самое проделывается для строки выше закрашиваемой.
З адание на лабораторную работу № 5 "Заливка области с затравкой "
Построить область с отверстиями, произвести заполнение, используя алгоритм простой затравки.
Построить область с отверстиями, произвести заполнение, используя алгоритм построчной затравки.
В чем суть итеративного и рекурсивного алгоритмов?
Что такое пространственная когерентность?
Сравните два алгоритма, найдите недостатки и преимущества.
Чем отличаются четырех- и восьмисвязные алгоритмы (и области). Преимущества и недостатки.