CGAL::Delaunay_triangulation_3 期间无限循环

Infinite loop during CGAL::Delaunay_triangulation_3

我正在使用 CGAL 库对 3D 点云进行三角测量。有时应用程序运行良好,但大多数时候它会卡住。它在三角剖分中插入新的 3D 点时进入无限循环。这个问题我只在 Windows 上遇到,在 Linux 上它总是工作正常。我在 Exact_predicates_inexact_constructions_kernel 内核中使用 CGAL 4.6 x64,在 Windows 8.1 x64 上使用 Visual Studio 2012/2015,在 Ubuntu 上使用 GCC 14.04 x64.

关于如何在 Windows 构建中解决此问题的任何建议?

更新:按照此 link 找到重现问题的最少代码和示例数据集:https://drive.google.com/file/d/0B8bb0qT4PvT8V2hqUEt0RUstLTg 问题似乎出在搜索最近点和插入新点的优化过程中(编译前确定的两段代码是等价的,但第二段优化了两种方式:只使用一个 locate( ) 而不是两个并且不 allocate/use 每个点一个 std::vector).

我认为错误出在您的 struct adjacent_vertex_back_inserter_t operator= 应该如下:

    inline void operator=(const vertex_handle_t& w) {
      assert(! delaunay.is_infinite(v))
        if ( !delaunay.is_infinite(w) && (delaunay.geom_traits().compare_distance_3_object()(p, w->point(), v->point()) == CGAL::SMALLER)){
          v = w;
      }