CGAL 3.4: Как получить координаты конечной вершины из Finite_edges_iterator? - PullRequest
3 голосов
/ 22 января 2010

Вот код:

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
}

Из руководства :

"Ребра не представлены явно, они только неявно представлены через отношения смежности двух граней. Каждое ребро имеет два неявных представления: ребро грани f, противоположное вершине, индексированной i, можно представить как также как край соседа (i) of f. "

Это нормально для меня ... но как мне получить конечные вершины ребра, используя CT::Finite_edges_iterator в приведенном выше коде?

Обновление: Мне удалось придумать это решение:

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

Я все еще ищу лучший способ сделать это.

Ответы [ 3 ]

2 голосов
/ 11 августа 2010

Мне удалось придумать это решение:

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

Я все еще ищу лучший способ сделать это.

1 голос
/ 09 октября 2013

Я использую что-то вроде

Триангуляция :: Vertex_handle fVertex = eit-> first-> vertex (Triangulation :: ccw (eit-> second));

Триангуляция :: Vertex_handle sVertex = eit-> first-> vertex (Триангуляция :: cw (eit-> second));

0 голосов
/ 22 января 2010

Ребра обеспечивают индексы вершин на грани. У грани триангуляции есть только 3 вершины в CGAL. Края это триплет; (лицо, я, J). Вы можете получить i-ю (0, 1 или 2) вершину грани, используя метод vertex (i). . Итак, чтобы получить вершины, используйте:

v1 = eit->first->vertex(eit->second);
v2 = eit->first->vertex(eit->third);
...