CGAL可视性计算错误的可视多边形(Simple Polygon Visibility算法)

3
我需要计算一个给定多边形某些顶点的可见性多边形。我使用CGAL的可见性计算库,但是对于这个示例多边形和它的第35个顶点(以及几个其他点),计算出了以下(明显错误的)结果,其中可见性多边形的一条边与原始多边形的一条边相交。
我使用以下代码进行构建:
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实现的一个bug还是我的代码有问题?

编辑: 将算法更改为 CGAL::Triangular_expansion_visibility_2<Arrangement_2> tev(polygon_arr); (第7行)解决了问题,所以很可能是CGAL的一个bug。

1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接