2017-09-08 73 views
3

我想使用Voronoi图提取边缘点(点位于凸包的边界边缘上)。我知道一个无界单元格包含一个边界站点点,但是如何使用迭代器访问该信息?使用CGAL的Voronoi图:仅提取边缘点(凸包)

解决方案

VD vd; 
//initialise your voronoi diagram 
VD::Face_iterator it = vd.faces_begin(), beyond = vd.faces_end(); 
for (int f = 0; it != beyond; ++f, ++it) 
{ 
    std::cout << "Face " << f << ": \n"; 
    if (it->is_unbounded()) 
    { 
    // it's a boundary point 
    } 
} 

回答

0

阅读CGAL 2D Delaunay Triangulation: How to get edges as vertex id pairs,并铭记维诺和德劳内的关系检查这个example

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h> 
#include <CGAL/Delaunay_triangulation_2.h> 
#include <fstream> 
typedef CGAL::Exact_predicates_inexact_constructions_kernel K; 
typedef CGAL::Delaunay_triangulation_2<K> Triangulation; 
typedef Triangulation::Edge_iterator Edge_iterator; 
typedef Triangulation::Point   Point; 
int main() 
{ 
    std::ifstream in("data/voronoi.cin"); 
    std::istream_iterator<Point> begin(in); 
    std::istream_iterator<Point> end; 
    Triangulation T; 
    T.insert(begin, end); 
    int ns = 0; 
    int nr = 0; 
    Edge_iterator eit =T.edges_begin(); 
    for (; eit !=T.edges_end(); ++eit) { 
    CGAL::Object o = T.dual(eit); 
    if (CGAL::object_cast<K::Segment_2>(&o)) {++ns;} 
    else if (CGAL::object_cast<K::Ray_2>(&o)) {++nr;} 
    } 
    std::cout << "The Voronoi diagram has " << ns << " finite edges " 
     << " and " << nr << " rays" << std::endl; 
    return 0; 
} 

如果这不回答你的问题,然后得到启发通过它并玩耍。