КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Відсікання опуклим багатокутникомУ багатьох завданнях комп'ютерної графіки часто доводиться мати справа з відсіканням не тільки простим прямокутним вікном, але й вікном досить довільної геометрії. Зокрема, такі завдання можуть виникнути при використанні перспективних проекцій тривимірних сцен, але не тільки в цих випадках. Тому актуальної є завдання відсікання опуклим багатокутником. Ясно, що простий аналіз за допомогою кодів Сазерленда-Коена в такій ситуації не застосуємо. Тут потрібний надійний і досить ефективний алгоритм знаходження крапки перетинання двох довільно орієнтованих відрізків, а також алгоритм визначення місця розташування крапки щодо багатокутника (усередині, зовні або на границі). Розглянемо завдання про перетинання відрізка з кінцями
Рис. 7.7. Перетинання відрізка багатокутником Звичайно, використання цієї формули припускає, що Для кожного відрізка можливі три випадки взаємного розташування з багатокутником: - крапок перетинання немає; - існує одна крапка перетинання; - існують дві крапки перетинання. У кожному із цих варіантів для знаходження перетинання відрізка з вікном необхідно вміти визначати приналежність крапки опуклому багатокутнику. З мал. 7.7 видно, що якщо для будь-якої крапки Таким чином, алгоритм відсікання відрізка починається з аналізу розташування кінців відрізка стосовно вікна. Якщо обидві крапки лежать усередині вікна, то відрізок повністю видимий, і подальший пошук припиняється. Якщо тільки одна із крапок лежить усередині вікна, то має місце випадок II, і має бути знайти одну крапку перетинання. І, нарешті, якщо обидві крапки лежать поза вікном, то існують або дві крапки перетинання (відрізок перетинає дві границі вікна), або ні однієї (відрізок повністю не бачимо). Втім, дві крапки перетинання можуть збігатися (якщо відрізок проходить через вершину багатокутника), але цей випадок у додатковому аналізі не має потреби. Далі виконується цикл по всіх ребрах багатокутника з метою знаходження крапок перетинання. Для кожного ребра перед початком пошуку перетинання необхідно перевірити, чи не паралельно воно з відрізком. Якщо це так, то можна обчислити відстань від одного з кінців відрізка до прямої, що проходить через ребро
|