2017-01-13 6 views
0

Я пытаюсь найти достаточно оптимальный алгоритм для определения того, пересекает ли отрезок линии трехмерный выпуклый непланарный многоугольник. Лучшее, что я могу сейчас увидеть, это нарисовать линию, которая разбивает непланарный многоугольник пополам, определяет, лежит ли отрезок линии справа или слева от линии расщепления, а затем продолжайте разделение, пока не смогу определить пересечение. Причина этого заключается в том, что я могу определить, в какой области 3d сферической диаграммы воронной точки находится данная точка. Тем не менее, время найти решение может стать зависящим от поплавкового разрешения моих разделов строк.Линейный сегмент Пересечение 3D-выпуклого непланарного многоугольника

Диаграмма Spherical Voronoi Diagram

неплоский многоугольники Пример

enter image description here

В этом примере, я бы рисовать отрезок между голубыми точками и центром блока сферы (добавленной после вычисления voronoi, они не являются точками, используемыми для вычисления диаграммы). Затем мне нужно выяснить, какой полигон пересекает этот сегмент линии, чтобы определить, в какой области он находится.

+0

У вас есть многоугольник или многогранник? –

+0

@ RazimanT.V. Форма, включаемая сферой, по определению является многогранником. Однако в моем коде он хранится в виде набора полигонов. Меня интересуют только отдельные многоугольники многогранника при поиске пересечений. Я считаю, что правильное определение граней многогранника в этом сценарии представляет собой трехмерные выпуклые непланарные многоугольники – asdf

ответ

1

Это можно решить с помощью геометрии координат.

Сначала разделите многоугольник на треугольники. Например, если многоугольник ABCDE рассматривает треугольники ABC, ACD и ADE. В вашей проблеме сегмент линии пересекает многоугольник тогда и только тогда, когда он пересекает хотя бы один треугольник. Мы проверим, пересекает ли этот отрезок треугольник следующим образом.

Пусть треугольник KLM, а отрезок линии - УФ. Уравнение плоскости, содержащей KLM, будет иметь вид ax + на + cz + d = 0, а уравнение линии, содержащее UV, будет иметь вид (x-x_0)/e = (y-y_0)/f = (г-z_0)/г. Решая эти уравнения одновременно, мы можем найти координаты P = (x, y, z) пересечения прямой и плоскости.

После того, как P найден, мы должны убедиться, что он лежит как на УФ, так и на KLM. Первое верно, если сумма расстояний от P до U и V равна длине УФ. Для последнего проверьте, добавляются ли области треугольников, образованных P и краями KLM (то есть PKL, PLM и PMK), к области KLM.

+0

Я не уверен, что это работает для непланарного многоугольника. Я не могу придумать, как упростить геометрию до ax + на + cz + d = 0 в этом случае. [См. Здесь] (http://help.autodesk.com/cloudhelp/2015/ENU/MayaLT/images/GUID-752F96F6-89E4-4ACB-8E9D-B25034EB01FE.png) для визуального представления непланарного многоугольника. – asdf

+0

Можете ли вы дать вершинные координаты образца непланарного многоугольника? –

+0

Вот пример одного из полигонов: [[-0,01413831, -0,1588434, 0.98720255], [-0.28359024, -0.30261862, 0.90994426], [-0.24100966, -0.39396359, 0.88696507], [0.54257997, -0,8064585 , 0.23501419], [0,6377325, -0,4882386, 0,5957519], [0.39324987, -0.18387223, 0.90085823]] – asdf