C++ CGAL::Delaunay_三角剖分_3期间的无限循环

C++ CGAL::Delaunay_三角剖分_3期间的无限循环,c++,infinite-loop,triangulation,cgal,delaunay,C++,Infinite Loop,Triangulation,Cgal,Delaunay,我正在使用CGAL库对3D点云进行三角剖分。有时应用程序工作正常,但大多数情况下它会卡住。在三角剖分中插入新的3D点时,它将进入无限循环。我只在Windows上遇到这个问题,在Linux上它总是很好。我在Windows 8.1 x64上使用CGAL 4.6 x64,在Windows 8.1 x64上使用Visual Studio 2012/2015,在Ubuntu 14.04 x64上使用GCC,使用内核精确谓词不精确构造 关于如何在Windows版本上解决此问题,有什么建议吗 更新:按照此链接

我正在使用CGAL库对3D点云进行三角剖分。有时应用程序工作正常,但大多数情况下它会卡住。在三角剖分中插入新的3D点时,它将进入无限循环。我只在Windows上遇到这个问题,在Linux上它总是很好。我在Windows 8.1 x64上使用CGAL 4.6 x64,在Windows 8.1 x64上使用Visual Studio 2012/2015,在Ubuntu 14.04 x64上使用GCC,使用内核精确谓词不精确构造

关于如何在Windows版本上解决此问题,有什么建议吗

更新:按照此链接查找再现问题的最小代码和示例数据集:
问题似乎出在搜索最近点并插入新点的优化过程中(编译前确定的两段代码是等效的,但第二段代码以两种方式优化:只使用一个locate()而不是两个,并且不要为每个点分配/使用std::vector).

我认为缺陷存在于您的
结构相邻的\u顶点\u背面\u插入器\u t
运算符=
应如下所示:

    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;
      }

请提供一个请在更新的问题上查找mcve您使用的编译器选项是什么?CGAL依赖于双精度运算的精确舍入。所有编译标志都在随代码分发的CMakeList.txt中;为了在linux上与CGAL兼容,我不得不使用-fronting-math@Irineau:谢谢你的建议,但是,即使没有出现在CMakeList.txt中,我已经尝试过在Windows上设置和不设置这些标志,这没有什么区别。因此,如果这个标志是一个问题,它们只是问题的一部分,肯定还有其他问题;非常感谢。不过,我还是觉得有点奇怪,在Linux上,这个问题并没有表现出来,输出结果也和预期的一样。这就是为什么我没有对代码进行三重检查,我确信它只是与平台相关的东西。