Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Кліпування багатокутників




Від завдання відсікання відрізків можна перейти до більше складного: кліпування довільних багатокутників. Якщо багатокутник неопуклий, то в результаті перетинання навіть із прямокутним вікном може вийти трохи не зв'язаних між собою фігур, як це показано на мал. 7.8.

 

Рис. 7.8. Відсікання неопуклого багатокутника

Коли коштує завдання штрихування замкнутої області одночасно із завданням відсікання, те важливо правильно визначити приналежність знову отриманих фігур внутрішньої або зовнішньої частини вихідного багатокутника. Нехай вихідний багатокутник заданий упорядкованим списком вершин , що відповідають ребрам . Для відсікання такого багатокутника прямокутним вікном можна застосувати алгоритм, запропонований Сазерлендом і Ходжменом. Ідея його полягає в послідовному відсіканні частини багатокутника прямими, що відповідають сторонам вікна. Результатом його роботи є впорядкований список вершин, що лежать у видимій частині вікна. На кожному кроці алгоритму утвориться деяка проміжна фігура, також представлена впорядкованим списком вершин і ребер. Приклад таких послідовних відсікань показаний на мал. 7.9. У процесі відсікання послідовно обходиться список вершин, причому кожна чергова крапка за винятком першої розглядається як кінцева крапка ребра, початковою крапкою якого є попередня крапка зі списку. Порядок, у якому розглядаються сторони вікна, не має значення. У процесі обходу формується список нових вершин багатокутника.

 

Рис. 7.9. Послідовні кроки клішування довільного багатокутника

На першому кроці для першої вершини в списку визначається її приналежність видимої області. Якщо вона видима, то вона стає першою крапкою першого оброблюваного ребра й заноситься в список нових вершин. Якщо ж вона невидима, то в список нових вершин не заноситься, але однаково стає першою крапкою ребра.

Для аналізованого ребра можливі чотири випадки розташування щодо вікна.

1. Ребро повністю видиме. Чергова крапка заноситься в список нових вершин (що предстоїть уже повинна перебувати в цьому списку, оскільки ребро повністю видиме).

2. Ребро повністю невидимо. Ніяких дій не виробляється.

3. Ребро виходить із області. Перебуває крапка перетинання ребра зі стороною вікна й заноситься в список нових ребер.

4. Ребро входить в область. Також відшукується крапка перетинання зі стороною вікна й заноситься в список нових вершин. Кінцева крапка теж заноситься в список нових вершин.

У цьому алгоритмі постійно доводиться визначати видимість крапки стосовно конкретного ребра вікна, що відтинає. Вікно також можна задати у вигляді впорядкованого списку вершин. Якщо обхід вершин вікна здійснюється за годинниковою стрілкою, то його внутрішня область буде розташована праворуч від границі. При цьому розташування крапки відносно прямій, який належить ребро, можна встановлювати різними способами:

1. Вибирається початкова крапка даного ребра й будується вектор і вектор внутрішньої нормалі до границі (ребру) вікна. Обчислюється скалярний добуток . Якщо , то крапка є видимою.

2. Будується просторовий вектор (третю координату можна покласти рівної нулю). Вектор (також просторовий, лежачий у тій же площині, що й ) спрямований уздовж ребра (з урахуванням напрямку обходу). Обчислюється векторний добуток . Якщо координата у вектора позитивна, то крапка лежить праворуч від ребра (є видимою).

3. Виписується канонічне рівняння прямої, що проходить через ребро:

4.

5. Для довільної внутрішньої крапки вікна обчислюється значення , а також для крапки обчислюється . Якщо числа й мають однаковий знак, то крапка є видимою.

Найбільше просто ці алгоритми реалізуються у випадку відсікання прямокутним вікном зі сторонами, паралельними осям координат.




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 349; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.