Определите, является ли точка внутренней или внешней по отношению к поверхности 3D Alpha-shapes в CGAL
Я использую CGAL для создания вогнутой оболочки набора трехмерных точек, используя ex_alpha_shapes_3 Пример . Далее, я хотел бы выяснить, находится ли точечный запрос в пространстве внутри поверхности, созданной треугольными вогнутыми гранями корпуса (вывод кода ex_alpha_shapes_3) или нет. Для этого должна быть полезна техника "точка в многоугольнике". Я был бы признателен, если бы кто-нибудь мог помочь мне с этой проблемой.
2 ответа:
Вы можете использовать функцию locate и в зависимости от симплекса, на который падает точка, а выход функции classify симплекса вы будете непосредственно знать, находитесь ли вы внутри, снаружи или на границе.
- каким бы ни был симплексный тип, внешнее есть внешнее, внутреннее есть внутреннее.
- Если точка падает на ребро, регулярное находится на границе, а сингулярное зависит от того, каким должно быть изолированное ребро в вашей установке
- Если точки падают на вершину, Регулярное находится на границе, а сингулярное-зависит от того, должна ли изолированная входная точка находиться в вашей установке
Я не знаю о CGAL, но есть несколько эвристик, которые вы можете использовать, учитывая, что ваш многогранник известен как выпуклый. Вы можете использовать любые оси, но предположим, что мы работаем в плоскости XY и на мгновение игнорируем Z-компонент. Поскольку ваша форма выпуклая, обычно будет только два треугольника, координаты XY которых окружают координаты XY вашей точки. Для любого треугольника можно быстро определить, если x[min]