【发布时间】:2014-09-24 10:44:15
【问题描述】:
我有两个非凸网格,我想找到它们之间的最近距离。一个近似值足以满足我的需要(只要它与真实值的偏差不会太大)。
我打破了许多凸部分的非凸网格,出于速度原因,我还找到了每个凸部分的凸包。
然后,我测试第一个和第二个网格的外壳之间的所有组合的距离。最短的定义了两个网格之间的最近距离。
我已经有了一个使用 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;
【问题讨论】:
-
你用的是什么内核?
-
请查看更新后的帖子,信息已添加。
-
尝试将 ET 替换为 CGAL::Lazy_exact_nt<:gmpz>
-
不幸的是没有帮助,有编译错误。我不知道该怎么做:在
QR_solver_impl.h中触发的CGAL::Lazy_exact_nt<CGAL::Gmpzf>::Lazy_exact_nt调用没有匹配函数
标签: graphics 3d computer-vision distance cgal