КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Алгоритми заповнення областей
Для заповнення областей, обмежених замкнутою лінією, застосовуються два основних підходи: затравочное заповнення й растрове розгорнення. Методи першого типу виходять із того, що задано деяку крапку (запал) усередині контуру й заданий критерій приналежності крапки границі області (наприклад, заданий колір границі). В алгоритмах шукають крапки, сусідні із затравочной і розташовані усередині контуру. Якщо виявлено сусідню крапку, що належить внутрішньої області контуру, то вона стає затравочной і пошук триває рекурсивно. Методи растрового розгорнення засновані на скануванні рядків растра й визначенні, чи лежить крапка усередині заданого контуру області. Сканування здійснюється найчастіше "зверху долілиць", а алгоритм визначення приналежності крапки заданої області залежить від виду її границі. Спочатку розглянемо простий алгоритм заповнення із запалом з використанням стека. Під стеком у цьому випадку ми будемо розуміти масив, у який можна послідовно поміщати значення й послідовно витягати, причому витягають елементи не в порядку надходження, а навпаки: за принципом "першим прийшов - останнім пішов" ("first in - last out"). Алгоритм заповнення виглядає в такий спосіб: Помістити затравочный пиксель у стек Поки стік не порожній: Витягти пиксель зі стека Инициализировать пиксель Для кожного із чотирьох сусідніх пикселей: Перевірити, чи є він граничним і чи був він инициализирован Якщо ні, то помістити пиксель у стек Алгоритм можна модифікувати таким чином, що сусідніми будуть уважатися вісім пикселей (додаються елементи, розташовані в діагональному напрямку). Методи растрового розгорнення розглянемо спочатку в застосуванні до заповнення багатокутників. Найпростіший метод побудови полягає в тому, щоб для кожного пикселя растра перевірити його приналежність внутрішності багатокутника. Але такий перебір занадто неекономічний, оскільки фігура може займати лише незначну частину екрана, а геометричний пошук - завдання трудомістка, сполучена з довгими обчисленнями. Алгоритм стане більше ефективним, якщо попередньо виявити мінімальний прямокутник, у який занурений контур багатокутника, але й этого може виявитися недостатньо. У випадку, коли багатокутник, що обмежує область, заданий списком вершин і ребер (ребро визначається як пара вершин), можна запропонувати ще більш ощадливий метод. Для кожної сканирующей рядки визначаються крапки перетинання з ребрами багатогранника, які потім упорядковуються по координаті . Визначення того, який інтервал між парами перетинань є внутрішній для багатогранника, а який ні, є досить простим логічним завданням. При цьому якщо сканирующая рядок проходить через вершину багатогранника, те це перетинання повинне бути враховане двічі у випадку, коли вершина є крапкою локального мінімуму або максимуму. Для пошуку перетинань сканирующей рядка з ребрами можна використовувати алгоритм Брезенхема побудови растрового образа відрізка. На закінчення як приклад приведемо алгоритм зафарбування внутрішньої області трикутника, заснований на складанні повного впорядкованого списку всіх відрізків, що становлять цей трикутник. Для запису горизонтальних координат кінців цих відрізків будемо використовувати два масиви й розмірністю, рівної числу пикселей растра по вертикалі (мал. 10.11). Побудова починається з ініціалізації масивів і : масив заповнюється нулями, а масив - числом , рівним числу пикселей растра по горизонталі. Потім визначаємо значення , що обмежують трикутник у вертикальному напрямку. Тепер, використовуючи модифікований алгоритм Брезенхема, занесемо границі відрізків у масиви й . Для цього щораз при переході до чергового пикселю при формуванні відрізка замість його ініціалізації будемо порівнювати його координату із умістом -й осередку масивів. Якщо , то записуємо координату в масив . Аналогічно за умови координату записуємо в масив . Якщо тепер послідовно застосувати алгоритм Брезенхема до всім трьох сторонам трикутника, то ми одержимо потрібним образом заповнені масиви границь. Залишається тільки проинициализировать пиксели усередині відрізків . Цей алгоритм можна легко поширити на випадок довільного опуклого багатокутника.
Рис. 10.11. Схема побудови растрового розгорнення трикутника
Дата добавления: 2014-01-07; Просмотров: 1088; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |