我有两个非凸网格,我想找到它们之间最近的距离。一个近似值足以满足我的需求(只要它不会偏离真实值太多)。
我打破了许多凸起部分的非凸网格,出于速度原因,我也发现了每个凸起部分的凸包。
然后,我测试第一个和第二个网格的外壳之间所有组合的距离。最短的一个定义了两个网格之间的最近距离。
我已经有了CGAL's Optimal Distances包的工作解决方案(见下图)。结果很好,但运行时并不理想,实际上它是我管道中的主要瓶颈。
这个问题是资源密集型的,但是使用CGAL或其他库或方法获得类似结果的更快替代方案真的很不错。不幸的是,到目前为止我还没有找到任何替代方案。
更新
上面提供的链接指向我正在关注的CGAL示例,即“ polytope_distance_d_fast_exact.cpp ”示例。关于使用的内核,我使用:
// use an inexact kernel...
typedef CGAL::Homogeneous<double> K;
typedef K::Point_3 Point;
// ... and the EXACT traits class based on the inexcat kernel
typedef CGAL::Polytope_distance_d_traits_3<K, ET, double> Traits;
typedef CGAL::Polytope_distance_d<Traits> Polytope_distance;
答案 0 :(得分:0)
这是一个较旧的图书馆 - 自从我使用它已经过了几年 - 但我似乎记得尝试用GNU Triangulated Surface库做类似的东西......
特别是,使用函数gts_surface_distance
来找到两个GtsSurfaces之间的距离(我认为你的非凸面网格仍然可以表示为)。
有关详细信息,请参阅here。
我害怕我不知道这对你来说是否更快 - 但也许值得一试!