Я планирую использовать классы CGAL Triangulation и Delaunay Triangulation в качестве базовой геометрической структуры для алгоритмов планирования движения роботов. Основная трудность, с которой я столкнулся до сих пор, заключается в присвоении дополнительных геометрических данных полным ячейкам в абстрактном комплексе. Например, чтобы найти кратчайший путь через полную ячейку, мне нужно вычислить набор векторов нормалей ко всем граням. Для этого я использую дорогостоящую псевдообратную процедуру. Поскольку эти вычисления должны выполняться несколько раз в каждой полной ячейке, я предпочитаю сохранять эти данные после их вычисления и извлекать их во время последовательных вычислений. Кроме того, я хотел бы хранить данные о столкновениях для каждой полной ячейки, а не пересчитывать их заново после уточнения заданной триангуляции.
Просматривая некоторые ответы здесь и пытаясь понять структуру CGAL, я достиг некоторого понимания по этому вопросу:
- Плохая идея переписывать геометрическое ядро только для этого...
- Я видел примеры использования базового класса вершин с информацией, в которой точки дополнены индексами здесь. Хотя использование
Triangulation_cell_base_with_info
кажется простым обходным путем, я считаю его неэлегантным приемом, поскольку он требует от меня реализации класса-оболочки для хранения дополнительных данных и передачи этого класса в алгоритм планирования. - Я могу вывести класс ячейки из
Triangulation_ds_cell_base
. Это выглядит наиболее приемлемым способом, но я не могу найти хороший пример кода, который поможет мне начать работу. Мне нужно не только наследование класса, но и пример кода, как получить доступ к данным ячеек в различных сценариях: через итератор, смежность вершин и так далее.
Итак, вот два моих вопроса:
- Какой способ CGAL хранить и извлекать дополнительные геометрические данные для каждой ячейки?
- Есть ли хороший пример кода, делающего именно это?
EDIT: я забыл упомянуть, что мне нужно использовать триангуляцию dD, представленную в CGAL 4.6.
*_with_info
- это путь, и я не понимаю, почему он кажется вам хакерским. В dD кажется, что вы можете передать в качестве второго аргумента триангуляции:Triangulation_data_structure<Dimension, Triangulation_vertex<K>, Triangulation_full_cell<K, MyInfo> >
. - person Marc Glisse   schedule 19.06.2015