3

这是一些代码:

struct K : CGAL::Exact_predicates_inexact_constructions_kernel {};

typedef CGAL::Triangulation_vertex_base_2<K>               Vb;
typedef CGAL::Constrained_triangulation_face_base_2<K>     Fb;
typedef CGAL::Triangulation_data_structure_2<Vb,Fb>        TDS;
typedef CGAL::Exact_predicates_tag                         Itag;
typedef CGAL::Constrained_triangulation_2<K, TDS, Itag>    CT;
typedef CT::Point                                          Point;

for (CT::Finite_edges_iterator eit = ct.finite_edges_begin();
    eit != ct.finite_edges_end(); ++eit){
    // TODO: list vertex co-ordinates here
}

手册

“边没有显式表示,它们只是通过两个面的邻接关系隐式表示。每条边都有两个隐式表示:与索引为 i 的顶点相对的面 f 的边可以表示为f 的邻居 (i) 的边缘。"

这对我来说很好......但是我如何使用CT::Finite_edges_iterator上面给出的代码中的 a 来获得边缘的末端顶点?

更新: 我设法想出了这个解决方案:

Segment s = ct.segment(eit);
const Point& p1 = s.point(0);
const Point& p2 = s.point(1);

我仍在寻找更好的方法来做到这一点。

4

3 回答 3

2

我设法想出了这个解决方案:

Segment s = ct.segment(eit);
const Point& p1 = s.point(0);
const Point& p2 = s.point(1);

我仍在寻找更好的方法来做到这一点。

于 2010-08-11T09:10:06.303 回答
1

我用过类似的东西

Triangulation::Vertex_handle fVertex = eit->first->vertex(Triangulation::ccw(eit->second));

Triangulation::Vertex_handle sVertex = eit->first->vertex(Triangulation::cw(eit->second));

于 2013-10-09T17:27:05.440 回答
0

边提供面上顶点的索引。三角剖分的面在 CGAL 中只有 3 个顶点。边是三元组;(脸,我,j)。您可以使用 vertex(i) 方法获取面的第 i 个(0、1 或 2)顶点。. 因此,要获取顶点,请使用:

v1 = eit->first->vertex(eit->second);
v2 = eit->first->vertex(eit->third);
于 2010-01-22T06:10:20.347 回答