
- •Компьютерная графика.
- •2. Задачи кг.
- •Графические функции примитивов.
- •4. Вывод текста.
- •5. Понятие холста.
- •6. Графические примитивы
- •7. Базовые компоненты
- •9. Метрическое пространство
- •10) Двумерные аффинные преобразования координат.
- •Поворот Rotate
- •Тражение Reflection
- •Сдвиг (Деформация)
- •Растяжение и сжатие
- •16. Окно и область вывода.
- •17. Растровая графика, общие сведения
- •Достоинства и недостатки растровой графики
- •18. Цвет в растре. Модель rgb.Кодировка цвета и яркости.
- •19. Цвет в растре. Модель cmy.
- •20. Растровые дисплеи.
- •23. Системы с телевизионным растром
- •24. Видеоадаптер
- •25.Дисплеи с регенерацией
- •26. Понятие фрактала и фрактальной графики.
- •27. Построение линий на растре.
- •28. Алгоритм Брезенхэма
- •29. Векторная графика: назначение, элементы, структура.
- •30. Каноническое уравнение прямой.
- •31. Параметрическое уравнение прямой и уравнение в отрезках. Параметрические уравнения прямой
- •32. Алгоритм определения принадлежности точки внутренности треугольника
- •34. Кривая Безье. Геометрическая интерпретация.
- •35. Раскраска на основе растровой развертки.
- •36. Заливка области с затравкой
- •0.5.1 Простой алгоритм заливки
- •37. Понятие точки схода.
- •38. Перспективные преобразования: подходы и решения.
- •39. Видовое преобразование координат.
- •40. Перспективное преобразование координат.
- •41. Аналитическая модель поверхности
- •Векторная полигональная модель
- •43. Равномерная сетка
- •Неравномерная сетка. Изолинии
36. Заливка области с затравкой
При этом тем или иным образом задается заливаемая (перекрашиваемая) область, код пиксела, которым будет выполняться заливка и начальная точка в области, начиная с которой начнется заливка.
По способу задания области делятся на два типа:
гранично-определенные, задаваемые своей (замкнутой) границей такой, что коды пикселов границы отличны от кодов внутренней, перекрашиваемой части области. На коды пикселы внутренней части области налагаются два условия - они должны быть отличны от кода пикселов границы и кода пиксела перекраски. Если внутри гранично-определенной области имеется еще одна граница, нарисованная пикселами с тем же кодом, что и внешняя граница, то соответствующая часть области не должна перекрашиваться;
внутренне-определенные, нарисованные одним определенным кодом пиксела. При заливке этот код заменяется на новый код закраски.
В этом состоит основное отличие заливки области с затравкой от заполнения многоугольника. В алгоритмах же заливки области с затравкой нам вначале надо прочитать пиксел, затем определить принадлежит ли он области и если принадлежит, то перекрасить.
Заливаемая область или ее граница - некоторое связное множество пикселов. По способам доступа к соседним пикселам области делятся на 4-х и 8-ми связные. В 4-х связных областях доступ к соседним пикселам осуществляется по четырем направлениям - горизонтально влево и вправо и в вертикально вверх и вниз. В 8-ми связных областях к этим направлениям добавляются еще 4 диагональных. Используя связность мы может, двигаясь от точки затравки, достичь и закрасить все пикселы области.
Важно отметить, что для 4-х связной прямоугольной области граница 8-ми связна (рис. а) и наоборот у 8-ми связной области граница 4-х связна (см. рис. б). Поэтому заполнение 4-х связной области 8-ми связным алгоритмом может привести к "просачиванию" через границу и заливке пикселов в примыкающей области.
В общем, 4-х связную область мы можем заполнить как 4-х, так и 8-ми связным алгоритмом. Обратное же неверно. Так область на рис. а мы можем заполнить любым алгоритмом, а область на рис. б, состоящую из двух примыкающих 4-х связных областей можно заполнить только 8-ми связным алгоритмом.
Рис. 0.5.1: Связность областей и их границ
С использованием связности областей и стека можно построить простые алгоритмы закраски как внутренне, так и гранично-определенной области. В [] рассматриваются совсем короткие рекурсивные подпрограммы заливки. В [] - несколько более длинные итеративные подпрограммы.
0.5.1 Простой алгоритм заливки
Рассмотрим простой алгоритм заливки гранично-определенной 4-х связной области.Заливка выполняется следующим образом:
определяется является ли пиксел граничным или уже закрашенным,
если нет, то пиксел перекрашивается, затем проверяются и если надо перекрашиваются 4 соседних пиксела.
Понятно, что несмотря на простоту и изящество программы, рекурсивная реализация проигрывает итеративной в том, что требуется много памяти для упрятывания вложенных вызовов.
В [] приведен итеративный алгоритм закраски 4-х связной гранично-определенной области. Логика работы алгоритма следующая:
Поместить координаты затравки в стек
Пока стек не пуст
Извлечь координаты пиксела из стека.
Перекрасить пиксел.
Для всех четырех соседних пикселов проверить
является ли он граничным или уже перекрашен.
Если нет, то занести его координаты в стек.
На рис. а) показан выбранный порядок перебора соседних пикселов, а на рис. б) соответствующий ему порядок закраски простой гранично-определенной области.
a) Порядок перебора соседних пикселов |
б) Порядок заливки области |