Тестування, чи лежить тетраедр всередині багатогранника


15

У мене є тетраедр і багатогранник p . t обмежений таким чином, що він завжди ділить усі свої вершини з p . Я хочу визначити, чи лежить t всередині p .т pтpt p

Я хотів би додати одну деталь до проблеми, якщо вона може сприяти вирішенню: - тетраедр Делоне, а грані р є трикутними і сильно відносяться до вершин р . Тетраедром є Делоне, якщо навколо його вершин немає іншої вершини. Обличчя сильно делоне, якщо на його поверхні існує навколосфера, що містить вершини цього обличчя, але немає іншої вершини на ній або всередині неї.tpp

Ці цифри показують ту ж проблему в просторі: 2D

Оригінальний багатокутник p :

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

Делоне триангуляція вершин p :

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

Результат тесту всередині / зовні над трикутниками t (Затінені трикутники знаходяться всередині а решта - зовні ):p

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

Бажаний результат (обрізка зовнішніх трикутників) :

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


Моя оригінальна проблема в 3D-просторі, тому трикутники на наведених фігурах переводяться на тетраедри, а багатокутник p перекладається на довільний багатогранник p . Я розібрався в деяких формулюваннях цієї проблеми:tpp

Формулювання 1
Єдиними частинами які можуть бути поза p, є його краї та трикутні грані, але в цілому може існувати p, у якого на його поверхні є ребра всіх зовнішніх t , тому, як альтернатива, ця проблема також може бути сформульована як перевірити, чи існує для тетраедра t грань, яке лежить поза p ?tpp tt p

Формулювання 2 У
мене є інша можлива точка зору на цю проблему, але вона не має будь-якої формальної ідеї:
Геометрично, якщо зовні, то вона завжди буде триматися на зовнішній поверхні p . Отже, якщо ми можемо обчислити контури (неофіційно, зовнішня межа) C V і C V p такі, що V = V tV p і V t , V p - це множини вершин у t , p відповідно, тоді CтpСVСVpV=VтVpVт,Vpт,p ifftлежить всерединіp. СV=СVp тp

Я хотів би знати:

  • Як я можу вирішити або формулювання 1, або формулювання 2 ?
  • Або чи існує зовсім інший підхід до вирішення цього питання?

Оновлення:
Тепер я розумію, що цю проблему можна звести до точки в задачі багатогранника . Оскільки зовнішній тетраедр матиме принаймні одну грань, яка лежить поза p , то будь-яка довільна точка на цій грані (крім її вершин, взагалі) завжди буде лежати поза p . Тому для кожної грані t мені потрібно взяти довільну точку і перевірити, чи лежить ця точка поза p .тp pт p

З моменту статті в полігоні я дізнався про алгоритм лиття Рея та алгоритм намотування чисел . Проміння лиття не є чисельно стійким для випадків, коли точка лежить на поверхні . Але чисельна надійність алгоритму числення Winding там не була вирішена. p

Виходячи з вищесказаного, тепер, здається, моя основна проблема (будь-ласка, підкажіть, чи слід це ставити як окреме запитання):
Чи є чисельно надійний алгоритм для точки в полігоновій задачі?


pтpтpтp

тpтp

1
p

1
невипуклість має дивний характер, що всі вершини можуть знаходитися всередині багатогранника, і все ж тетраедр може бути зовні (оскільки край не повинен лежати всередині). Можливий алгоритм, дивіться, чи можуть ребра (між багатогранником і тетраедром) мати перетини => велика проблема, що тетраедр лежить зовні
Нікос М.

1
Ви бачили алгоритм відстані Гільберта-Джонсона – Керті? Вам слід спочатку розкласти багатокутник / багатогранник на опуклі форми (як ви зазначали, спрощений комплекс зробив би цю роботу). GJK, як відомо, дуже стабільний і дуже швидкий.
Псевдонім

Відповіді:


2

Нещодавно я знайшов одне рішення цієї проблеми в роботі "Робоча сегментація всередині та зовні з використанням узагальнених намотувальних чисел" від Alec Jacobson et.al., тут . Він вирішує проблему розташування, якщо точка знаходиться всередині (або зовні) довільної (такої, що має самоперехрестя, не багатообразних, відкритих поверхонь тощо) багатокутної сітки, використовуючи поняття узагальненого числа обмотки .

тp


pтppтppттp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.