2014-01-22 3 views
1

Если у вас есть набор «правильные» соединенные треугольники, такие, как это:Откуда вы знаете, что вы «внутри» набора треугольников?

geodesic mesh sphere

... и вы знаете, вершины/нормали каждого треугольника, что является эффективным способом, чтобы проверить, является ли или нет другой пункт - «внутри» или «содержится внутри» набора треугольников?

Спасибо!

+1

Это вопрос 2D или 3D? –

+0

3D, @YvesDaoust: D – HotDogCannon

+1

У вас всегда есть выпуклые формы (как в этом примере), или они могут быть произвольными? –

ответ

5

С данной точки, нарисовать прямую линию. Проверьте пересечение линии с каждым треугольником и подсчитайте все пересечения, найденные на одной стороне точки. Если этот счет нечетный, вы внутри.

Чтобы сделать вычисления проще, используйте x=x0, y=y0 для линии и спроектируйте все на плоскости XY. Используйте How to determine if a point is in a 2D triangle? и, наконец, проверьте значение z.

+1

Это подход грубой силы. Более эффективный подход (для больших сеток и при наличии достаточного количества запросов местоположения для амортизации начальной стоимости) для лучевого кастинга будет построена иерархическая структура пространственных данных (дерево BSP, дерево kd, Octree), чтобы отбирать множество треугольников во время запроса и значительно уменьшить общее количество тестов пересечения лучей/треугольников. Поскольку здесь направление лучей фактически фиксировано, вместо него можно было бы использовать более простую структуру пространственных данных 2D в плоскости xy. – user3146587

Смежные вопросы