Як тріангулювати з діаграми Вороно?


13

Я обчислював діаграму Вороної з набору точок (з Boost.polygon ).

Я намагаюся знайти триангуляцію Делоне, з'єднуючи кожен центр клітин для кожного краю Вороної, але я пропускаю деякі ребра.

На наступному зображенні червоні точки - це мої початкові точки, сині лінії - це краї Вороної (я проігнорував нескінченні краї), а зелені лінії - краї триангуляції (по одному зеленому краю для кожного синього краю, що з'єднує два витоки клітини).

Ми можемо бачити, що діагональні ребра відсутні. Що я пропускаю?

діаграма вороного

Відповіді:


19

Центральна точка вашої діаграми - це вироджений край діаграми Вороного. Якщо ви генеруєте діаграму Вороного для хмари нерегулярних точок, кожна вершина матиме ступінь 3. Вершина зі ступенем 4 (або більше) може відбуватися лише тоді, коли збігаються дві (або більше) вершин. Це означає, що між ними є край нульової довжини. Але цей край все ж повинен мати відповідний край у триангуляції Делоне. Проблема полягає в тому, що довільно, який із двох можливих ребер ви виберете, оскільки край нульової довжини не має жодного пов'язаного напрямку.

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

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

введіть тут опис зображеннявведіть тут опис зображення

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

Також зауважте, що наявність ще більших вироджень (більше чотирьох точок, розподілених під рівними кутами навколо кола), ймовірно, потребує додаткової уваги:

введіть тут опис зображеннявведіть тут опис зображення

Ці анімації також показують, що (навіть у невиродженому випадку) відповідні краї Вороного та Делоне не обов'язково насправді перетинаються в їх обмеженій мірі. Це може ускладнити переконання, що 2 (або 3) ребра, які трикутнуть правильний багатокутник на кінці, насправді відповідають декільком виродженим ребрам, які знаходяться в центрі. Також зауважте, що загалом існує 5 різних трикутників п'ятикутника та 14 трикутників шестикутника (хоча я не знаю, чи можна отримати всі 14, деформуючи нероджену тріангуляцію).

Редагувати (за ОП)

Діаграми Вороного, обчислені з Boost.polygon, дозволяють проходити по кожній вершині Вороного та кожному краю, пов'язаному з цими вершинами (за годинниковою або проти годинникової стрілки). Таким чином, можна створити по одному трикутнику для кожної пари ребер (два з'єднані ребра будуть пов'язувати 3 комірки).


Ви можете відповісти і тут , або я видалю своє інше питання.
arthur.sw

3
@ arthur.sw Перехресне повідомлення, як правило, не рекомендується в SE, тому я вважаю, що його видалення було б кращим варіантом.
Мартін Ендер

творець інтерактивної діаграми voronoï: alexbeutel.com/webgl/voronoi.html
arthur.sw

Дивіться також stackoverflow.com/questions/34342038/… для коду
Джованні Фуншал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.