我正在使用 CGAL 库来对3D点云进行三角测量。有时应用程序工作正常,但大多数时候它被卡住了。它在三角测量中插入新的3D点时进入无限循环。这个问题我只在Windows上得到,在Linux上它始终可以正常工作。我使用CGAL 4.6 x64与内核 Exact_predicates_inexact_constructions_kernel 在Windows 8.1 x64上使用Visual Studio 2012/2015,在Ubuntu 14.04 x64上使用GCC。
有关如何在Windows版本中修复此问题的任何建议吗?
更新:点击此链接查找重现问题的最小代码和示例数据集:https://drive.google.com/file/d/0B8bb0qT4PvT8V2hqUEt0RUstLTg 问题似乎在于搜索最近点并插入新点的优化过程(编译前确定的两段代码是等效的,但第二段是以两种方式优化的:只使用一个 locate()< / em>而不是两个,并且不为每个点分配/使用 std :: vector 。
答案 0 :(得分:1)
我认为该错误发生在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;
}