【问题标题】:Closest distance between 2 convex hulls2个凸包之间的最近距离
【发布时间】: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&lt;CGAL::Gmpzf&gt;::Lazy_exact_nt 调用没有匹配函数

标签: graphics 3d computer-vision distance cgal


【解决方案1】:

这是一个较旧的库 - 我使用它已经有几年了 - 但我似乎记得尝试用 GNU Triangulated Surface 库做类似的事情......

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

请参阅here 了解更多信息。

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

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 2017-02-24
    • 2014-07-19
    • 1970-01-01
    • 2016-10-31
    • 2017-04-07
    • 2018-09-13
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多