Способ CGAL для хранения извлекает геометрическую информацию для полной ячейки в триангуляции.

Я планирую использовать классы CGAL Triangulation и Delaunay Triangulation в качестве базовой геометрической структуры для алгоритмов планирования движения роботов. Основная трудность, с которой я столкнулся до сих пор, заключается в присвоении дополнительных геометрических данных полным ячейкам в абстрактном комплексе. Например, чтобы найти кратчайший путь через полную ячейку, мне нужно вычислить набор векторов нормалей ко всем граням. Для этого я использую дорогостоящую псевдообратную процедуру. Поскольку эти вычисления должны выполняться несколько раз в каждой полной ячейке, я предпочитаю сохранять эти данные после их вычисления и извлекать их во время последовательных вычислений. Кроме того, я хотел бы хранить данные о столкновениях для каждой полной ячейки, а не пересчитывать их заново после уточнения заданной триангуляции.

Просматривая некоторые ответы здесь и пытаясь понять структуру CGAL, я достиг некоторого понимания по этому вопросу:

  1. Плохая идея переписывать геометрическое ядро ​​только для этого...
  2. Я видел примеры использования базового класса вершин с информацией, в которой точки дополнены индексами здесь. Хотя использование Triangulation_cell_base_with_info кажется простым обходным путем, я считаю его неэлегантным приемом, поскольку он требует от меня реализации класса-оболочки для хранения дополнительных данных и передачи этого класса в алгоритм планирования.
  3. Я могу вывести класс ячейки из Triangulation_ds_cell_base. Это выглядит наиболее приемлемым способом, но я не могу найти хороший пример кода, который поможет мне начать работу. Мне нужно не только наследование класса, но и пример кода, как получить доступ к данным ячеек в различных сценариях: через итератор, смежность вершин и так далее.

Итак, вот два моих вопроса:

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

EDIT: я забыл упомянуть, что мне нужно использовать триангуляцию dD, представленную в CGAL 4.6.


person Dmitry Yershov    schedule 18.06.2015    source источник
comment
В 2D/3D *_with_info - это путь, и я не понимаю, почему он кажется вам хакерским. В dD кажется, что вы можете передать в качестве второго аргумента триангуляции: Triangulation_data_structure<Dimension, Triangulation_vertex<K>, Triangulation_full_cell<K, MyInfo> >.   -  person Marc Glisse    schedule 19.06.2015
comment
Если вы не хотите слишком углубляться в реализацию CGAL, вы можете легко создать сбоку карту (хэш), которая связывает любую информацию с Full_cell_handle.   -  person Marc Glisse    schedule 19.06.2015
comment
Глядя на исходный код CGAL, у меня возникает ощущение, что добавление класса/структуры MyInfo в качестве политики хранения для структуры данных триангуляции затормозит код. Политика хранения принимает либо политику по умолчанию, либо политику зеркалирования, каждая из которых фактически содержит комбинаторные данные для полного подключения к ячейке. Если вы просто замените его сторонним классом, эта необходимая структура данных будет отсутствовать... Кроме того, я считаю использование хэш-карт еще более серьезным взломом, чем хранение индексов в информации о ячейке. Основная причина в том, что я не хочу реализовывать класс-оболочку для хранения этих данных.   -  person Dmitry Yershov    schedule 19.06.2015
comment
Ну читай лучше. То, что я предложил, сводится к замене No_full_cell_data (пустой класс) любым классом, который вам нравится, содержащим ваши данные, это не меняет политику. Если вы собираетесь называть все чистые решения хаками, это очень плохо для вас. И вы до сих пор не объяснили, на что вы жалуетесь.   -  person Marc Glisse    schedule 19.06.2015
comment
Плохо... Я проверил Triangulation_ds_full_cell вместо Triangulation_full_cell. Попробую по вашему совету. Спасибо.   -  person Dmitry Yershov    schedule 19.06.2015