Що таке вироджені багатокутники? Як перевірити, чи є певна пара багатокутників вироджена чи ні?
Що таке вироджені багатокутники? Як перевірити, чи є певна пара багатокутників вироджена чи ні?
Відповіді:
Полігон вироджується, якщо деякі його вершини лежать одна на одній. наприклад, трикутник (0,0), (0,1), (0,0) вироджений. Він має 3 сторони і 3 вершини, але дві вершини повторюються. Можна повторити вершину кілька разів (наприклад (0,0), (0,0), (0,0) - ще один вироджений трикутник). За визначенням перевірити, чи є багатокутник виродженим чи ні, непросто.
Але для чого використовують вироджені багатокутники? Одне застосування із графічного прискорення (3D-малювання) полягає в наступному:
У 3D-графічних графічних процесорах звичайно використовують тріангуляцію для візуалізації зображень. (Проста) причина використання трикутників полягає в тому, що вони є найпростішими можливими 2D об'єктами, тому не потрібно багато обладнання.
Якщо ми хочемо намалювати складне 3D-зображення, за цим обмеженням GPU нам доведеться розкласти його на кілька трикутників. Але якщо ми зателефонуємо GPU, щоб відображати кожен трикутник окремо, це буде дуже повільно (через кількість дзвінків). Так трикутна смужка використовується для зменшення кількості дзвінків до GPU. Хороше пояснення трикутних смуг можна знайти в документації Microsoft: «Трикутні смужки» , також ви можете побачити вікі для: « Трикутник» .
Але проблема виникає, коли ми хочемо намалювати два окремих об’єкти однією смужкою. У цьому випадку допомагають вироджені трикутники. GPU може виявити вироджені трикутники і пропустити їх малюнок. Тож ми можемо з'єднати дві окремі смуги з одним виродженим трикутником.
Загалом, якщо у нас є різні компоненти, такі, що у нас вже є відповідні смуги трикутника, ми можемо намалювати їх усі лише одним викликом до GPU. Це спричиняє додаткове використання пам’яті, але це компроміс між кількістю викликів до GPU для візуалізації та накладними витратами на використання додаткового виродженого трикутника.
Вироджений багатокутник - це той, що має нульову площу.
Як зазначали інші, це залежить. Взагалі, багатокутник не вироджується, якщо він не має аномальних точок, але це просто відсуває проблему назад на один крок; що таке "аномальне"?
Справжня відповідь полягає в тому, що багатокутник вироджується, якщо він порушує специфікацію. Трохи груба відповідь полягає в тому, що багатокутник вироджується, якщо це крайній випадок, з яким ваш алгоритм не може впоратися.
Ось приклад зі світу ГІС. Специфікація простих функцій OGC має дуже ретельне визначення того, що робить полігон "дійсним". Цитуючи з розділу 6.1.11.1:
Твердження для полігонів (правила, що визначають дійсні багатокутники) наступні:
а) Полігони топологічно закриті;
б) межа полігону складається з набору лінійних кілець, що складають його зовнішні та внутрішні межі;
в) Жодні два Кільця в межовому хресті та Кільця в межі Полігона не можуть перетинатися в точці, але лише як дотична, наприклад
;Примітка. Остання умова говорить про те, що в точці, спільній для двох кривих, точки поблизу не можуть бути загальними. Це змушує кожну спільну точку бути точкою дотику.
г) Полігон може не мати ліній зрізу, шипів або проколів, наприклад: ;
д) Інтер'єр кожного багатокутника - це з'єднаний набір точок;
f) Зовнішня частина багатокутника з 1 або більше отворами не з'єднана. Кожен отвір визначає з'єднаний компонент зовнішності.
У вищезазначених твердженнях інтер'єр, закриття та зовнішній вигляд мають стандартні топологічні визначення. Поєднання (a) і (c) робить багатокутник регулярним набором закритих точок.