2014-09-24 160 views
0

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

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

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

我已经有一个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; 
+0

你使用的是什么内核? – sloriot 2014-09-24 11:41:51

+0

请检查更新后的帖子,信息添加到那里。 – 2014-09-24 12:14:19

+0

尝试用CGAL替换ET :: Lazy_exact_nt sloriot 2014-09-24 13:52:50

回答

0

这是一个有点库较早的 - 因为我用它,它已经有几年 - 但我似乎记得试图做的GNU Triangulated Surface库类似的东西..

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

有关更多信息,请参阅here

恐怕我不知道它是否会更快 - 但也许值得一试!