分段的CGAL Voronoi图

  • 本文关键字:Voronoi CGAL 分段 cgal
  • 更新时间 :
  • 英文 :


我已经使用CGAL Segment_Dlaunay_graph为线段集合创建了voronoi图。我想提取与voronoi细胞相对应的Segment_Delanay_graph的边。为此,有两种方法draw_dual((和draw_skeleton((,但它们都包括一些我不想保留的附加边(并且draw_skereton删除了一些我确实想保留的边(。

这是一张显示问题的图片:

示例voronoi图

黑线是输入。它们通常是由几个段组成的组,端到端连接以形成更长的线,尽管每个段都被单独输入到segment_Dlaunchay_graph中,如下所示:

s 1677850.1951146198 466276.4198628192  1784307.2726912862 466276.4198628192
s 1784307.2726912862 466276.4198628192  1784307.2726912862 567677.3831007502
s 1784307.2726912862 567677.3831007502  1677850.1951146198 567677.3831007502

红色和蓝色线由draw_dual((输出。我想保留代表连接输入线周围voronoi单元边界的红线,但我不想保留蓝线是否可以根据存储在Segment_Delanay_graph中的信息过滤掉不需要的边?如果是,如何

一些示例代码:

#include <iostream>
#include <fstream>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Segment_Delaunay_graph_filtered_traits_2.h>
#include <CGAL/Segment_Delaunay_graph_2.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Segment_Delaunay_graph_filtered_traits_2<K>  Gt;
typedef CGAL::Segment_Delaunay_graph_2<Gt>             SDG2;
using namespace std;
int main()
{
//read line segments from input file
string inFile = "example-a.in";
ifstream ifs(inFile);
SDG2          sdg;
SDG2::Site_2  site;
std::vector<SDG2::Site_2> sites;
while (ifs >> site) {
sites.push_back(site);
}
ifs.close();
//add line segments to diagram
sdg.insert(sites.begin(), sites.end(), CGAL::Tag_true());
//save voronoi edges to a file
string outFile = "example-a.out";
ofstream ofs(outFile);
sdg.draw_dual(ofs);
ofs.close();
}

我观察到您想要保留的红线。它们是远离非交界点的边缘吗?您可以设置距离阈值d,如果边与其最近站点之间的距离小于d并且站点不是连接点,则删除此边。

最新更新