CGAL Visibility вычисляет неправильный многоугольник видимости (алгоритм Simple Polygon Visibility) - PullRequest
0 голосов
/ 05 октября 2019

Мне нужно вычислить многоугольники видимости некоторых вершин данного многоугольника. Я использую библиотеку вычисления видимости CGALs, но для этого примера многоугольника и его 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 или это моя ошибкаcode?

Редактировать: Изменение алгоритма на CGAL::Triangular_expansion_visibility_2<Arrangement_2> tev(polygon_arr); (л. 7) решает проблему, так что это, вероятно, ошибка в CGAL. ​​

1 Ответ

0 голосов
/ 14 октября 2019

Вы правы, это ошибка в CGAL. Я создал проблему для этого: https://github.com/CGAL/cgal/issues/4289

...