c++ - CGAL Visibility 计算错误的可见性多边形(简单多边形可见性算法)

标签 c++ cgal

我必须计算给定多边形的某些顶点的可见性多边形。我正在使用 CGAL 可见性计算库,但对于 this example polygon和它的第 35 个顶点(以及更多点),以下(显然是错误的)result被计算出来,可见性多边形的一条边与原始多边形的一条边相交。

我使用了以下代码进行构建:

typedef CGAL::Arrangement_2<CGAL::Arr_segment_traits_2<Epeck>> Arrangement_2;

Arrangement_2 polygon_arr;
CGAL::insert(polygon_arr, polygon.edges_begin(), polygon.edges_end());

Arrangement_2 vp_output;             
CGAL::Simple_polygon_visibility_2<Arrangement_2, CGAL::Tag_false> non_regular_visibility(polygon_arr);


// ci is vertex circulator
Arrangement_2::Halfedge_const_handle preceding_he =
    std::find_if(polygon_arr.halfedges_begin(),polygon_arr.halfedges_end(),
        [&ci](const typename Arrangement_2::Halfedge &e) {
            return !e.face()->is_unbounded() && e.target()->point() == *ci;
         }
);

non_regular_visibility.compute_visibility(*ci, preceding_he, vp_output);
for (auto eit = vp_output.edges_begin(); eit != vp_output.edges_end(); ++eit)
{
    segments.push_back(eit->curve());
}

这是 CGAL 实现中的错误还是我的代码中的错误?

编辑: 将算法更改为 CGAL::Triangular_expansion_visibility_2<Arrangement_2> tev(polygon_arr); (l. 7) 解决了问题,所以它可能是 CGAL 中的错误。

最佳答案

你是对的,这是 CGAL 中的一个错误。我为此创建了一个问题:https://github.com/CGAL/cgal/issues/4289

关于c++ - CGAL Visibility 计算错误的可见性多边形(简单多边形可见性算法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58244381/

相关文章:

c++ - CGAL:正常和加权 3D 三角剖分之间的区别

c++ - 构造函数参数列表中的模板参数无效

c++ - 使用成员函数启动线程

algorithm - 使用 CGAL 求解 LP 可行性

r - 如何将 C++ 库中的 exit() 替换为 Rcpp?

c++ - CGAL::Surface_mesh 当顶点和面的数量已知时创建表面网格

c++ - 是否有任何 O(n^2) 算法来生成数组的所有子序列?

c++ - 在静态函数中初始化静态变量导致未解决

c++ - 拖动分隔栏以调整两个面板的大小时,内容(或背景)仍然存在

c++ - 75 :15: fatal error: stdlib. h : No such file or directory #include_next <stdlib. h>