Как проверить пересечение Многогранника_3 в CGAL

Я новичок в cgal, и мне нужно проверить пересечение двух Polyhedron_3, я знаю, что существует функция под названием correction_Polyhedron_3_Polyhedron_3 (), которая делает это, но я не знаю, как это реализовать.

Может кто-нибудь привести пример использования этой функции или другого способа проверки пересечения двух Polyhedron_3?


person Rodrigo    schedule 22.01.2019    source источник


Ответы (1)


Вы можете использовать person sloriot    schedule 22.01.2019

comment
Я видел, что эта функция предназначена для ломаной линии, а не для многогранников, в функции correction_Polyhedron_3_Polyhedron_3 (const Polyhedron & P, const Polyhedron & Q, OutputIterator out) я просто хочу знать, что это такое Output_iterator. - person Rodrigo; 23.01.2019
comment
Есть 4 различных перегрузки, и данная ссылка указывает на версию для сеток. - person sloriot; 23.01.2019
comment
Я собираюсь попробовать еще раз, спасибо, но я нашел итератор вывода, чтобы функция могла работать с помощью crossction_Polyhedron_3_Polyhedron_3 (), это std :: size_t nb_polylines = 0, CGAL :: Counting_output_iterator out (& nb_polylines), я не уверен, что означает число nb_polylines , но я хотел бы знать, существует ли итератор вывода, который является многогранником пересечения. - person Rodrigo; 23.01.2019
comment
Вы не должны использовать эту недокументированную функцию, она будет удалена в следующей версии (4.14) CGAL. - person sloriot; 23.01.2019
comment
Привет, спасибо за совет, я пробовал другую функцию, которую вы рекомендовали, но у меня есть вопрос по первому примеру, который находится в руководстве пользователя Polygon Mesh Processing на веб-странице CGAL (cgal.geometryfactory.com/~mgimeno/PMP_do_intersect/). Мой вопрос: у меня есть два куба в неформатном формате, один из них триангулирован, а другой нет, программа работает с триангулированным кубом, но с нетриангулированным кубом она возвращает Не действительный входной файл, потому что куб не триангулирован ? - person Rodrigo; 24.01.2019
comment
Когда я запускаю функцию, она возвращает ошибку: do_intersect не является членом CGAL :: Polygon_mesh_processing, поэтому я перешел к заголовку CGAL / Polygon_mesh_processing / crossction.h и заметил, что нет функции с именем do_intersect, иначе есть функция под названием surface_intersection (const TriangleMesh & tm1, const TriangleMesh & tm2, OutputIterator polyline_output, const bool throw_on_self_intersection = false) Я использовал итератор std :: size_t nb_polylines = 0, CGAL :: Counting_output_iterator out (& nbsp; устранено? nb_polylines? - person Rodrigo; 24.01.2019
comment
Какую версию CGAL вы используете? Эти функции были представлены в CGAL 4.12 - person sloriot; 24.01.2019
comment
У меня cgal 4.11, поэтому я обновил свой репозиторий и снова проверил версию libcgal-dev, и она по-прежнему остается 4.11. Я работаю в виртуальной коробке с Ubuntu 18.04.1 - person Rodrigo; 24.01.2019
comment
Если вы просто загрузите последнюю версию с здесь, вы можете использовать версию только с заголовком, настроив свой пример с использованием cmake -DCGAL_DIR=/path/where/you/extracted/CGAL-4.13 /path/of/my/example - person sloriot; 26.01.2019