CGAL, Обрезанная вороноая диаграмма, заключенная в прямоугольник

Я использую CGAL с Qt, чтобы нарисовать диаграмму Вороного. я использовалCGAL::Voronoi_diagram_2<DT,AT,AP>так как мне нужны лица. Это пример кода:

for(Face_iterator f = VD.faces_begin(); f != VD.faces_end(); f++)
    {
        Ccb_halfedge_circulator ec_start = (f)->ccb();
        Ccb_halfedge_circulator ec = ec_start;
        do {
            if (!ec->has_source())
            {
            }
            else
                QpolyF << QPointF(((Halfedge_handle)ec)->source()->point().x(), ((Halfedge_handle)ec)->source()->point().y());
        } while ( ++ec != ec_start );
        VectPolygon.push_back(QpolyF);
        QpolyF.clear();}

Мне нужно обрезать лучи, которые имеют источник или цель в бесконечности. Если я использую Cropped_voronoi_from_delaunay для генерации вороной, он дает только сегменты, а не грани. это typedefs:

typedef K::Line_2                                           Line_2;
typedef CGAL::Delaunay_triangulation_2<K>                   Delaunay_triangulation_2;
typedef Delaunay_triangulation_2::Face_iterator             dt_Face_iterator;
typedef Delaunay_triangulation_2::Edge_circulator           dt_Edge_circulator;

// typedefs for defining the adaptor
typedef CGAL::Exact_predicates_inexact_constructions_kernel                  K;
typedef CGAL::Delaunay_triangulation_2<K>                                    DT;
typedef CGAL::Delaunay_triangulation_adaptation_traits_2<DT>                 AT;
typedef CGAL::Delaunay_triangulation_caching_degeneracy_removal_policy_2<DT> AP;
typedef CGAL::Voronoi_diagram_2<DT,AT,AP>                                    VD;


// typedef for the result type of the point location
typedef AT::Site_2                    Site_2;
typedef AT::Point_2                   Point_2;

typedef VD::Locate_result               Locate_result;
typedef VD::Vertex_handle               Vertex_handle;
typedef VD::Face_handle                 Face_handle;
typedef VD::Face_iterator               Face_iterator;
typedef VD::Halfedge_handle             Halfedge_handle;
typedef VD::Ccb_halfedge_circulator     Ccb_halfedge_circulator;
 M4G08 июл. 2013 г., 16:05
Как я уже сказал, мне нужны лица, но этот пример в CGAL дает только сегменты.
 sloriot08 июл. 2013 г., 14:34
Почему вас не устраивает следующий пример:cgal.org/Manual/latest/doc_html/cgal_manual/Triangulation_2/... ?
 Sylvain Pion09 июл. 2013 г., 04:40
Существует также «2D Range and Neighbor Search», который довольно близок, но я не уверен, поддерживает ли он этот запрос, даже через передачу определенного функтора.cgal.org/Manual/latest/doc_html/cgal_manual/Point_set_2/...
 M4G09 июл. 2013 г., 21:49
Существует Unbounded_face_iterator для неограниченных граней. Можно ли найти пересечение этих неограниченных граней с прямоугольником? Проблема в том, как определить неограниченные грани как многоугольник или объект для проверки пересечения.

Ответы на вопрос(2)

http://code.google.com/p/cgal-voronoi-cropping которые обрезают диаграмму Вороного до прямоугольника, в результате получается HDS. Смотрите main.cpp в тестовом каталоге

Решение Вопроса

что это возможно сделать с CGAL, но я нашел обходной путь на данный момент. в Qt класс QPolygon имеет функцию поиска пересеченных многоугольников.Qpolygon::intersected(yourPolygon), это результаты:

 Richard05 мая 2018 г., 16:55
Исходный код был бы весьма полезен в этом ответе.

Ваш ответ на вопрос