2013-06-25 3 views
3

Итак, мне интересно, что происходит в триангуляции CGAL Delaunay, когда вы вызываете соседнюю функцию для соседнего, который не существует. В документации (HERE) он говорит, что это:CGAL: Выход соседа, когда треугольник отсутствует.

The neighbor with index i is the neighbor which is opposite to the vertex with index i. 

Face_handle f.neighbor (int i) const //returns the neighbor i of f. 
             //Precondition:  0 ≤ i ≤ 2. 

Но не все треугольники могут иметь 3 соседей. Край и угловые треугольники будут соседними только 2. Учитывая, что теперь он должен вернуть Face_handle, что произойдет для соседей, которых не существует? Может быть, это будет NULL? Как я могу это проверить?

Причина, по которой я хочу это сделать, заключается в том, что я хотел бы идентифицировать все треугольники треугольника в триангуляции Delaunay. Быть в состоянии проверить треугольники с 2 или менее соседей было бы очень полезно.

Любые идеи?

+0

Поскольку вы говорите о «краеугольных и треугольных треугольниках», я считаю, вам нужно перечитать документацию CGAL, чтобы увидеть, что они называют триангуляцией. –

ответ

2

См. the documentation.

CGAL вводит бесконечную вершину , поэтому каждый «пограничный край» имеет дополнительный сосед, который представляет собой бесконечный треугольник, состоящий из двух вершин вашего ребра и бесконечной вершины.

+0

Удивительный, теперь есть способ проверить для соседа с бесконечной вершиной? Или это вопрос цикла через каждый из треугольников соседей и глядя на вершины, чтобы увидеть, если они бесконечны? –

+0

@Ben См. Первый пример кода по ссылке выше. Бесконечная вершина доступна с помощью 'myTriangulation.infinite_vertex()', поэтому вы можете проверить, содержит ли данное лицо это или нет. – Boris

+0

Спасибо, лучшее решение состоит в том, что тип триангуляции имеет проверку на бесконечные грани, поэтому я могу просто пойти: 'delaunay.is_infinite (face_iterator-> neighbour (0))' для проверки каждой грани вокруг треугольника. Ваша помощь была отличной. –