CGAL静态AABB树与光线相交许多球体

时间:2018-09-16 08:49:07

标签: cgal

我想使用CGAL的AABB树来计算许多静态球体与射线之间的交点。我刚接触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 :(得分:0)

您需要提供一个新的原始类型,它是概念AABBPrimitive的模型。基本上,您可以复制/粘贴CGAL::AABB_triangle_primitive的实现,并将其适应于球形情况。 下一个棘手的部分是提供AABBTraits概念所要求的光线和球体的相交谓词。 如果您不寻找精确的谓词,则可以简单地使用球体中心到射线辅助线的距离+球体中心的方向(相对于射线源)。

如果您需要精确的谓词,则类Filtered_predicate可以帮助您使谓词更可靠。