CGAL статическое дерево AABB для пересечения многих сфер лучами - PullRequest
0 голосов
/ 16 сентября 2018

Я хотел бы использовать дерево AABB CGAL для вычисления пересечения между многими статическими сферами и лучами. Я довольно новичок в CGAL, и мне, возможно, понадобится какое-то руководство.

Поскольку не представляется прямой поддержки сфер в дереве AABB, я думаю, необходимо дополнить функциональность, создав AABB_sphere_primitive. Разве это единственное, что необходимо для получения чего-то вроде AABB_tree / AABB_triangle_3_example.cpp с шарами вместо треугольников? Нужно ли также определять аналог Point_from_triangle_3_iterator_property_map?

typedef CGAL::Simple_cartesian<double> K;
typedef K::FT FT;
typedef K::Point_3 Point;
typedef K::Plane_3 Plane;
typedef K::Sphere_3 Sphere;          // <-- this is done already
typedef std::list<Sphere>::iterator Iterator;
typedef CGAL::AABB_sphere_primitive<K,Iterator> Primitive; // <---- must be defined newly
typedef CGAL::AABB_traits<K, Primitive> Traits;
typedef CGAL::AABB_tree<Traits> Tree;

Процедура пересечения сферы и луча уже где-то реализована (Spherical_kernel_intersections.h?) И будет использоваться?

Спасибо за указатели.

1 Ответ

0 голосов
/ 16 сентября 2018

Вам необходимо предоставить новый примитивный тип, который является моделью концепции AABBPrimitive. По сути, вы можете скопировать / вставить реализацию CGAL::AABB_triangle_primitive и адаптировать ее к случаю сферы. Следующая сложная часть заключается в предоставлении предиката пересечения для луча и сферы в соответствии с концепцией AABBTraits. Если вы не ищете точные предикаты, вы можете просто использовать расстояние от центра сферы до линии поддержки луча + направление центра сферы относительно источника луча.

Если вам нужны точные предикаты, класс Filtered_predicate может помочь вам сделать ваш предикат устойчивым.

...