两个凸壳之间的最近距离

时间:2014-09-24 10:44:15

标签: graphics 3d computer-vision distance cgal

我有两个非凸网格,我想找到它们之间最近的距离。一个近似值足以满足我的需求(只要它不会偏离真实值太多)。

我打破了许多凸起部分的非凸网格,出于速度原因,我也发现了每个凸起部分的凸包。

然后,我测试第一个和第二个网格的外壳之间所有组合的距离。最短的一个定义了两个网格之间的最近距离。

我已经有了CGAL's Optimal Distances包的工作解决方案(见下图)。结果很好,但运行时并不理想,实际上它是我管道中的主要瓶颈。

这个问题是资源密集型的,但是使用CGAL或其他库或方法获得类似结果的更快替代方案真的很不错。不幸的是,到目前为止我还没有找到任何替代方案。

enter image description here

更新

上面提供的链接指向我正在关注的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;

1 个答案:

答案 0 :(得分:0)

这是一个较旧的图书馆 - 自从我使用它已经过了几年 - 但我似乎记得尝试用GNU Triangulated Surface库做类似的东西......

特别是,使用函数gts_surface_distance来找到两个GtsSurfaces之间的距离(我认为你的非凸面网格仍然可以表示为)。

有关详细信息,请参阅here

我害怕我不知道这对你来说是否更快 - 但也许值得一试!