Как определить, находится ли данная точка внутри файлового объекта STereoLithography (.stl) c ++

0

Я пытаюсь определить точку внутри многогранника, импортированного из файла STereoLithography (.stl). Мне интересно, существует ли еще C++ решение/библиотека, которая решает эту проблему.

Я хочу избежать обхода решения Matlab

  • 2
    "Внутри объекта"? Вы имеете в виду, что у вас есть слово std::vector которое содержит точки, образующие многогранник, и вы хотите сказать, находится ли точка внутри или снаружи многогранника? В стандартном C ++ нет функции для этого, но я уверен, что доступны пакеты геометрии, которые делают такие вещи. Или можно написать небольшой кусочек кода, чтобы определить такую вещь ...
  • 0
    STL-файл будет содержать точки и их нормальные векторы да.
Показать ещё 8 комментариев
Теги:

1 ответ

0

Теория проблемы несколько проста, когда вы идете от точки к внешней стороне, вам нужно будет пройти нечетное количество облицовок (треугольников).

Некоторые псевдокоды

Vector3d toOutside { point, pointOutside }; // !!! how do we know a point is outside ?!?
for_each(triangleList, [&count, =toOutside](Triangle& triangle) { 
    if (Intersect(triangle, toOutside) // some fussiness with edges and triangle points.
        ++count;
}

if (count %2 == 1) 
    isInside = true;
else
    isOutside = false;

Найдя точку вне многогранника, найдите самые высокие x, y, z и добавьте 1.0 к ним.

Pseudo prof [ToDo: ссылка на статью с более жестким профи]
Простой случай ящик, если мы находимся внутри коробки, будет одно пересечение с стороной, если мы будем следовать за вектором toOutside. Если мы находимся внутри многогранника, то, если мы пройдем через треугольник, мы будем снаружи, если мы пройдем через 2 треугольника больше (в и из), мы все еще можем сказать, что мы были внутри. Если бы мы на самом деле находились вне многогранника, мы пройдем через и даже число треугольников (или ноль), следуя вектору toOutside.

Реализация C++ в geometrictools выглядит под mathematics-> сдерживанием-> point-in-polyhedron-> 3D для файлов.h и.inl.

Могут быть некоторые более оптимизированные тесты, которые используют обычный вектор для внешнего.
Кроме того, если у вас есть несколько объектов, с которыми вам нужно протестировать, подумайте о том, чтобы создать ограничительную рамку для каждого из них для отбраковки, поскольку векторные тесты могут быть дорогими.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню