Определите, является ли точка внутренней или внешней по отношению к поверхности 3D Alpha-shapes в CGAL


Я использую CGAL для создания вогнутой оболочки набора трехмерных точек, используя ex_alpha_shapes_3 Пример . Далее, я хотел бы выяснить, находится ли точечный запрос в пространстве внутри поверхности, созданной треугольными вогнутыми гранями корпуса (вывод кода ex_alpha_shapes_3) или нет. Для этого должна быть полезна техника "точка в многоугольнике". Я был бы признателен, если бы кто-нибудь мог помочь мне с этой проблемой.

2 2

2 ответа:

Вы можете использовать функцию locate и в зависимости от симплекса, на который падает точка, а выход функции classify симплекса вы будете непосредственно знать, находитесь ли вы внутри, снаружи или на границе.

  • каким бы ни был симплексный тип, внешнее есть внешнее, внутреннее есть внутреннее.
  • Если точка падает на ребро, регулярное находится на границе, а сингулярное зависит от того, каким должно быть изолированное ребро в вашей установке
  • Если точки падают на вершину, Регулярное находится на границе, а сингулярное-зависит от того, должна ли изолированная входная точка находиться в вашей установке

Я не знаю о CGAL, но есть несколько эвристик, которые вы можете использовать, учитывая, что ваш многогранник известен как выпуклый. Вы можете использовать любые оси, но предположим, что мы работаем в плоскости XY и на мгновение игнорируем Z-компонент. Поскольку ваша форма выпуклая, обычно будет только два треугольника, координаты XY которых окружают координаты XY вашей точки. Для любого треугольника можно быстро определить, если x[min]