У меня есть замкнутый объект, описываемый поверхностным представлением треугольников (описываемых тремя вершинами, которые образуют правило правой руки с нормалью, указывающей на "внешнюю" часть объекта). Я помещаю сферу некоторого радиуса в 3D-пространстве где-то рядом с поверхностью объекта. Я хочу определить, пересекает ли объект объект или нет.
Я подумал о трех способах определить это, но у каждого есть свои недостатки, и ни один из них не идеален.
1) Я могу определить "сторону", на которую будет помещена сфера, оттуда я могу вычислить сетку расстояний от эталонной плоскости до расстояния, на котором объект впервые встречается. Я могу сделать то же самое для противоположной "стороны" сферы, а затем просто проверить, всегда ли расстояние до объекта больше расстояния до поверхности сферы. Если расстояние до объекта всегда больше, сфера не пересекает объект в любой из точек сетки.
Преимущество этого в том, что оно довольно быстро, но поскольку я только вычисляю сдержанные точки, это не абсолютное. Если разрешение моей сетки слишком велико, есть вероятность, что сфера пересечется в точке, которая находится между моими узлами сетки.
2) Я могу взять все вершины всех треугольников и проверить их на уравнение размещенной сферы. Если вершины обнаружены внутри сферы, шар будет абсолютно частично внутри объекта.
Преимущество этого в том, что он довольно быстрый, но также очень подвержен неудаче. Сфера может пересекать объект внутри треугольника и пропускать все вершины вместе.
3) Я могу вычислить кластер точек на поверхности сферы. Затем я могу проверить, находится ли каждая точка внутри объекта или нет (с использованием 3D-версии точки внутри алгоритма многоугольника). Если какая-либо точка находится внутри объекта, часть сферы находится внутри объекта.
Преимущество этого заключается в том, что он может быть очень точным, в зависимости от того, сколько очков я использую на поверхности моей сферы (более высокая плотность точек = более высокая точность). Однако точка внутри объектного алгоритма довольно дорога, особенно когда число треугольников увеличивается. Этот метод был бы лучшим (даже скажет мне, где именно и в какой части сферы пересекает объект), но это будет очень медленно.
Есть ли какой-либо алгоритм или метод, которые вы, ребята, знаете, чтобы решить эту проблему? Моя главная цель - точность, мне нужно знать, будет ли сфера касаться или не будет касаться объекта. Было бы также неплохо узнать, куда касается космос или, по крайней мере, общая площадь. Наконец скорость всегда хорошая вещь.
Спасибо
-Faken