CGAL: вывод от соседа, когда треугольника нет

Поэтому мне интересно, что происходит в триангуляции Делоне 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? Как я могу это проверить?

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

Любые идеи?


person Fantastic Mr Fox    schedule 25.06.2013    source источник
comment
Поскольку вы говорите о краевых и угловых треугольниках, я считаю, что вам нужно перечитать документацию CGAL, чтобы увидеть, что они называют триангуляцией.   -  person Marc Glisse    schedule 25.06.2013


Ответы (1)


См. документацию.

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

person Boris Dalstein    schedule 25.06.2013
comment
Круто, теперь есть способ проверить соседа с бесконечной вершиной? Или это вопрос обхода каждого из соседей треугольника и просмотра вершин, чтобы увидеть, бесконечны ли они? - person Fantastic Mr Fox; 26.06.2013
comment
@Ben См. Первый пример кода по ссылке выше. Бесконечная вершина доступна с помощью myTriangulation.infinite_vertex() , поэтому вы можете проверить, содержит ли она данную грань или нет. - person Boris Dalstein; 26.06.2013
comment
Спасибо, лучшее решение состоит в том, что тип триангуляции имеет проверку на бесконечные грани, поэтому я могу просто пойти: delaunay.is_infinite(face_iterator->neighbor(0)), чтобы проверить каждую грань, окружающую треугольник. Ваша помощь была превосходной. - person Fantastic Mr Fox; 26.06.2013
comment
@Бен О, отлично! Рад, что был полезен. - person Boris Dalstein; 26.06.2013