我想使用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
?处实现并且将被使用吗?
感谢指针。
答案 0 :(得分:0)
您需要提供一个新的原始类型,它是概念AABBPrimitive
的模型。基本上,您可以复制/粘贴CGAL::AABB_triangle_primitive
的实现,并将其适应于球形情况。
下一个棘手的部分是提供AABBTraits
概念所要求的光线和球体的相交谓词。
如果您不寻找精确的谓词,则可以简单地使用球体中心到射线辅助线的距离+球体中心的方向(相对于射线源)。
如果您需要精确的谓词,则类Filtered_predicate
可以帮助您使谓词更可靠。