КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Кліпування багатокутниківВід завдання відсікання відрізків можна перейти до більше складного: кліпування довільних багатокутників. Якщо багатокутник неопуклий, то в результаті перетинання навіть із прямокутним вікном може вийти трохи не зв'язаних між собою фігур, як це показано на мал. 7.8.
Рис. 7.8. Відсікання неопуклого багатокутника Коли коштує завдання штрихування замкнутої області одночасно із завданням відсікання, те важливо правильно визначити приналежність знову отриманих фігур внутрішньої або зовнішньої частини вихідного багатокутника. Нехай вихідний багатокутник заданий упорядкованим списком вершин
Рис. 7.9. Послідовні кроки клішування довільного багатокутника На першому кроці для першої вершини в списку визначається її приналежність видимої області. Якщо вона видима, то вона стає першою крапкою першого оброблюваного ребра й заноситься в список нових вершин. Якщо ж вона невидима, то в список нових вершин не заноситься, але однаково стає першою крапкою ребра. Для аналізованого ребра можливі чотири випадки розташування щодо вікна. 1. Ребро повністю видиме. Чергова крапка заноситься в список нових вершин ( що предстоїть уже повинна перебувати в цьому списку, оскільки ребро повністю видиме). 2. Ребро повністю невидимо. Ніяких дій не виробляється. 3. Ребро виходить із області. Перебуває крапка перетинання ребра зі стороною вікна й заноситься в список нових ребер. 4. Ребро входить в область. Також відшукується крапка перетинання зі стороною вікна й заноситься в список нових вершин. Кінцева крапка теж заноситься в список нових вершин. У цьому алгоритмі постійно доводиться визначати видимість крапки стосовно конкретного ребра вікна, що відтинає. Вікно також можна задати у вигляді впорядкованого списку вершин. Якщо обхід вершин вікна здійснюється за годинниковою стрілкою, то його внутрішня область буде розташована праворуч від границі. При цьому розташування крапки 1. Вибирається початкова крапка 2. Будується просторовий вектор 3. Виписується канонічне рівняння прямої, що проходить через ребро: 4. 5. Для довільної внутрішньої крапки вікна Найбільше просто ці алгоритми реалізуються у випадку відсікання прямокутним вікном зі сторонами, паралельними осям координат. Питання й вправи 1. Що таке кліпування? 2. Якщо кінці відрізків мають коди 1000 і 0100, скільки сторін вікна він може перетинати? 3. При якому значенні коду одного з кінців відрізка він обов'язково буде частково видимим? 4. Якщо обидва кінці відрізка лежать поза вікном, то при яких кодах кінців він може проходити уздовж діагоналі вікна? 5. Який з алгоритмів відсікання відрізків ефективніше: наведений у блок-схемі 7.3 або заснований на розподілі відрізка навпіл? 6. За допомогою якої умови можна визначити приналежність крапки опуклому багатокутнику? 7. Чи буде ця умова застосовна у випадку довільного багатокутника? (підтвердите свою відповідь прикладами). 8. Які випадки розташування ребра щодо вікна розглядаються в алгоритмі клішування довільного багатокутника?
|