gpt4 book ai didi

c++ - 使用 CGAL : extract only edge points (convex hull) 的 Voronoi 图

转载 作者:太空狗 更新时间:2023-10-29 23:12:26 27 4
gpt4 key购买 nike

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

解决方案

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
}
}

最佳答案

阅读CGAL 2D Delaunay Triangulation: How to get edges as vertex id pairs ,并考虑到 Voronoi 和 Delaunay 之间的关系,检查这个 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;
}

如果这不能回答您的问题,那么从中获得灵感并尝试一下。

关于c++ - 使用 CGAL : extract only edge points (convex hull) 的 Voronoi 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46113131/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com