gpt4 book ai didi

c++ - 加权 Voronoi 的 CGAL 2D APOLLONIUS 图 - 如何生成和获取面和顶点?

转载 作者:行者123 更新时间:2023-11-30 04:15:28 31 4
gpt4 key购买 nike

我正在尝试根据 apollonius 图生成加权 voronoi。我正在使用 CGAL 库。我找不到如何从 apollonius 获取面和顶点的好例子。我有以下类型定义:

typedef double                                                                  NT;
typedef CGAL::Cartesian< NT> KernelCartes;
typedef CGAL::Ray_2<KernelCartes> Cartes_Ray;
typedef CGAL::Line_2<KernelCartes> Cartes_Line;
typedef CGAL::Segment_2<KernelCartes> Cartes_Segment;
typedef std::list<Cartes_Ray> Cartes_RayList;
typedef std::list<Cartes_Line> Cartes_LineList;
typedef std::list<Cartes_Segment> Cartes_SegmentList;
typedef CGAL::Point_2<KernelCartes> Cartes_Point;
typedef CGAL::Apollonius_graph_traits_2<KernelCartes> ApoTraits;
typedef CGAL::Apollonius_graph_2<ApoTraits> Apo_Graph;
typedef Apo_Graph::Site_2 Apo_Site;

在下文中,我尝试创建 Apollonius 图。 WVD 是加权 voronoi 图 (Apo_Graph)。

    WVD.clear();
double Weight;
foreach(QPointF point,List_Nodes)
{
Weight = NewRandomNumber(1,10);
Apo_Site k(Cartes_Point(point.x(),point.y()),Weight);
WVD.insert(k);
}

现在,我需要知道如何访问加权的 voronoi 和生成的面(以及之后的每个面的顶点)。

最佳答案

最后我这样做了:

typedef CGAL::Apollonius_graph_traits_2<Kernel_Exact>             APT;
typedef CGAL::Apollonius_site_2<Kernel_Exact> Site_2_Apo;
typedef Site_2_Apo::Point_2 Site_2_Point_2;
typedef Site_2_Apo::Weight Site_2_Weight;

typedef CGAL::Apollonius_graph_traits_2<Kernel_Exact> AGT2_K;
typedef CGAL::Apollonius_graph_2<AGT2_K> AG2;
typedef CGAL::Apollonius_graph_adaptation_traits_2<AG2> AG2_Trait;
typedef CGAL::Apollonius_graph_caching_degeneracy_removal_policy_2<AG2> AG2_Policy;
typedef CGAL::Voronoi_diagram_2<AG2,AG2_Trait,AG2_Policy> VD_AG2;

加载一些点:

std::vector<Site_2_Apo> List_Nodes;
for (int i = 0; i<= 100; i = i++)
{
for(int j = 0; j <= 100; j = j++)
{
List_Nodes.push_back(Site_2_Apo(Site_2_Point_2(i+NewRandomNumber(0,30),j+NewRandomNumber(0,30)),Site_2_Weight(NewRandomNumber(1,50))));
}
}

其余的:

VD_AG2 VDA;      //Voronoi Apol 

///Voronoi Generation
VDA.clear();
VDA.insert(List_Nodes.begin(),List_Nodes.end());

以及访问面和顶点:

  for(A_Bounded_faces_iterator f = VDA.bounded_faces_begin(); f != VDA.bounded_faces_end(); f++)
{

A_Ccb_halfedge_circulator ec_start = (f)->ccb();
A_Ccb_halfedge_circulator ec = ec_start;
poly.clear();
do {
x = ((A_Halfedge_handle)ec)->source()->point().x();
y = ((A_Halfedge_handle)ec)->source()->point().y();
poly.push_back(QPointF(x,y));
} while ( ++ec != ec_start );
List_Poly.push_back(poly);
}

这是结果:

http://i.stack.imgur.com/Esv8c.png

关于c++ - 加权 Voronoi 的 CGAL 2D APOLLONIUS 图 - 如何生成和获取面和顶点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18274584/

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