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? Как мога да проверя това?

Причината, поради която искам да направя това, е, че бих искал да идентифицирам всички триъгълници на ръба в триангулация на Делоне. Да можеш да проверяваш за триъгълници с 2 или по-малко съседи би било много полезно.

Някакви идеи?


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
@Ben О, добре, страхотно! Радвам се, че съм бил полезен. - person Boris Dalstein; 26.06.2013