- •Комп’ютерна графіка
- •1.3 Перетворення прямих ліній (відрізків)
- •1.4 Обертання
- •1.5 Відображення
- •1.6 Зміна масштабу
- •1.7 Двовимірний зсув і однорідні координати
- •2.2 Тривимірна зміна масштабу
- •2.3 Перетворення трьохвимірних координат в двовимірні
- •2.4 Тривимірний зсув
- •2.6 Відображення в просторі
- •2.7 Просторовий перенос
- •2.8 Тривимірне обертання навколо довільної осі
- •3.2 Косокутні проекції
- •Лабораторна робота №4 Алгоритм креслення відрізків
- •Теоретичні основи
- •Лабораторна робота № 5 Метод цифрового диференціального аналізатора
- •Теоретичні відомості
- •Алгоритм Брезенхема розкладання в растр відрізка для першого октанта
- •6.2. Загальний алгоритм Брезенхема.
- •Узагальнений цілочисельний алгоритм Брезенхема для усіх квадрантів
- •Лабораторна робота № 7 Алгоритм Брезенхема для генерації кола
- •Теоретичні основи
- •8.2 . Простий алгоритм з упорядкованим списком ребер
- •Простий алгоритм з упорядкованим списком ребер
- •8.3. Більш ефективні алгоритми з упорядкованим списком ребер
- •Більш ефективний алгоритм з упорядкованим списком ребер
- •9.1 Простий алгоритм заповнення з запалом і стеком
- •9.2 Простий алгоритм заповнення
- •Приклад 9.1. Простий алгоритм заповнення з запалом
- •Приклад 9.2. Алгоритм заповнення з запалом для багатокутника з діркою
- •9.3 Порядковий алгоритм заповнення з запалом
- •9.4 Алгоритм порядкового заповнення з запалом
- •9.5 Порядковий алгоритм заповнення з запалом
- •Приклад 9.3. Порядковий алгоритм заповнення з запалом
- •Література
- •Комп’ютерна графіка Методичні вказівки
9.1 Простий алгоритм заповнення з запалом і стеком
Помістити затравочний піксел у стек
Поки стек не порожній
Витягти піксел зі стека
Привласнити пікселу необхідне значення
Для кожного із сусідніх до біжучого 4-зв’язних пікселів перевірити: чи є він граничним пікселом чи не привласнене пікселу необхідне значення. Проігнорувати піксел у кожнім з цих двох випадків. В іншому випадку помістити піксел у стек.
Алгоритм можна модифікувати для 8-зв’язних областей, якщо переглядати 8-связні піксели, а не тільки 4-зв’язні. Наведемо більш формальний виклад алгоритму, у якому передбачається існування затравочного піксела і гранично-визначеної області.
9.2 Простий алгоритм заповнення
Запал (х, у) видає затравочний піксел
Push - процедура, що поміщає піксел у стек
Pop - процедура, що витягає піксел зі стека
Піксел (х, у) = Запал (х, у)
Ініціалізуємо стек
Push Піксел (х, у)
While (стек не порожній)
Вибираємо піксел зі стека
Pop Піксел (х, у)
If Піксел(х, у)<>Нове_значення then
Піксел(х, у)=Нове_значення
End if
Перевіримо, чи треба поміщати сусідні піксели в стек
If (Піксел(х+1, у)<>Нове_значення and
Піксел(х+1, у)<>Гран_значення) Then
Push Піксел(х+1, у)
If (Піксел(х, у+1)<>Нове_значення and
Піксел(х, у+1)<>Гран_значення) Then
Push Піксел(х, у+1)
If (Піксел(х-1, у)<>Нове_значення and
Піксел(х-1, у)<>Гран_значення) Then
Push Піксел(х-1, у)
If (Піксел(х, у-1)<>Нове_значення and
Піксел(х, у-1)<>Гран_значення) Then
Push Піксел(х, у-1)
End if
End while
В алгоритмі перевіряються і поміщаються в стек 4-зв’язні піксели, починаючи з правого від поточного піксела. Напрямок обходу пікселів - проти годинникової стрілки.
Приклад 9.1. Простий алгоритм заповнення з запалом
Як приклад застосування алгоритму розглянемо гранично-визначену полігональну область, задану вершинами (1, 0), (7, 0), (8, 1), (8, 4), (6, 6), (1, 6), (0,5) і (0, 1). Область зображена на рис.9.1. Затравочний піксел - (4, 3). Область заповнюється піксел за пікселем у порядку, зазначеному на рис.9.1 лінією зі стрілками. Числа, зображені на пікселі, позначають позицію піксела в стеку, яку він займає при роботі алгоритму. Для деяких пікселів таких чисел декілька. Це означає, що піксел поміщали в стек більше 1 разу. Коли алгоритм доходить до піксела (5, 5), стек нараховує 25 рівнів глибини і містить піксели (7, 4), (7, 3), (7, 2), (7, 1), (6, 2), (6, 3), (5, 5), (6, 4), (5, 5), (4, 4),(3, 3), (3, 4), (3, 5), (2, 4), (2, 3), (2, 2), (2, 2), (3, 2), (5, 1), (3, 2), (5, 2), (3, 3), (4, 4), (5, 3).
Тому що всі піксели, які оточують (5, 5), містять або граничні, або нові значення кольору, то жоден з них у стек не поміщається. Отже зі стека виймається піксел (7, 4) і алгоритм продовжує заповнювати колонку (7, 4), (7, 3), (7, 2), (7, 1). При досягненні піксела (7, 1) перевірка знову показує, що навколишні піксели або уже заповнено, або є граничними пікселами. Тому що в цей момент багатокутник цілком заповнений, то вибирання пікселів зі стека до повного його спустошення не викликає появи додаткових пікселів, які варто запам’ятати. Коли стек стає порожнім, алгоритм завершує роботу.
Рис.9.1. Затравочне заповнення за допомогою простого стекового алгоритму\
Багатокутник із прикладу 9.1 є однозв’язною областю, але алгоритм буде правильно заповнювати й області, що містять діри. Це показано в наступному прикладі.
