У мене є тетраедр і багатогранник p . t обмежений таким чином, що він завжди ділить усі свої вершини з p . Я хочу визначити, чи лежить t всередині p .
Я хотів би додати одну деталь до проблеми, якщо вона може сприяти вирішенню: - тетраедр Делоне, а грані р є трикутними і сильно відносяться до вершин р . Тетраедром є Делоне, якщо навколо його вершин немає іншої вершини. Обличчя сильно делоне, якщо на його поверхні існує навколосфера, що містить вершини цього обличчя, але немає іншої вершини на ній або всередині неї.
Ці цифри показують ту ж проблему в просторі:
Оригінальний багатокутник :
Делоне триангуляція вершин :
Результат тесту всередині / зовні над трикутниками (Затінені трикутники знаходяться всередині а решта - зовні ):
Бажаний результат (обрізка зовнішніх трикутників) :
Моя оригінальна проблема в 3D-просторі, тому трикутники на наведених фігурах переводяться на тетраедри, а багатокутник p перекладається на довільний багатогранник p . Я розібрався в деяких формулюваннях цієї проблеми:
Формулювання 1
Єдиними частинами які можуть бути поза p, є його краї та трикутні грані, але в цілому може існувати p, у якого на його поверхні є ребра всіх зовнішніх t , тому, як альтернатива, ця проблема також може бути сформульована як перевірити, чи існує для тетраедра t грань, яке лежить поза p ?
Формулювання 2 У
мене є інша можлива точка зору на цю проблему, але вона не має будь-якої формальної ідеї:
Геометрично, якщо зовні, то вона завжди буде триматися на зовнішній поверхні p . Отже, якщо ми можемо обчислити контури (неофіційно, зовнішня межа) C V і C V p такі, що V = V t ∪ V p і V t , V p - це множини вершин у t , p відповідно, тоді C ifftлежить всерединіp.
Я хотів би знати:
- Як я можу вирішити або формулювання 1, або формулювання 2 ?
- Або чи існує зовсім інший підхід до вирішення цього питання?
Оновлення:
Тепер я розумію, що цю проблему можна звести до точки в задачі багатогранника . Оскільки зовнішній тетраедр матиме принаймні одну грань, яка лежить поза p , то будь-яка довільна точка на цій грані (крім її вершин, взагалі) завжди буде лежати поза p . Тому для кожної грані t мені потрібно взяти довільну точку і перевірити, чи лежить ця точка поза p .
З моменту статті в полігоні я дізнався про алгоритм лиття Рея та алгоритм намотування чисел . Проміння лиття не є чисельно стійким для випадків, коли точка лежить на поверхні . Але чисельна надійність алгоритму числення Winding там не була вирішена.
Виходячи з вищесказаного, тепер, здається, моя основна проблема (будь-ласка, підкажіть, чи слід це ставити як окреме запитання):
Чи є чисельно надійний алгоритм для точки в полігоновій задачі?