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