Запрос на пересечение с boost::geometry::index::rtree

У меня есть экземпляр boost::geometry::index::rtree выровненных по оси блоков в трех измерениях. Я уже использую пересечение точек в версии 1.54 наддува. Работает как шарм. Ну, я хотел бы также запросить пересечение с линией (луч, сечение), которая, кажется, поддерживается бустом 1.59 (ошибочно, с некоторыми сбоями, но все еще довольно внушительно). К сожалению, как я уже сказал, я на версии 1.54. и у меня нет никаких шансов изменить это сейчас. Вопрос в том, как расширить геометрию в boost 1.54. так он поддерживает пересечения разделов с ограничивающими прямоугольниками в rtree? Какие шаблоны я должен специализировать? Есть ли что-то еще, что я должен сделать? Идеи? THB

1 ответ

Решение

Если вы пройдете bgi::intersects() предикат в запросе внутренних звонков bg::intersects() какие звонки bg::disjoint(), И эти проверки пространственных отношений проверяются на QueryGeometry / Box и QueryGeometry / Indexable. Например, если вы храните ящики, то внутренний вызов bg::intersects(Box, QueryGeometry),

Если тип QueryGeometry был адаптирован к одному из понятий Boost.Geometry, например, Segment, но функция просто не была реализована в используемой вами версии Boost, вы можете увидеть, как реализован алгоритм для комбинации понятий в последняя версия Boost. Например disjoint(Box, Segment) реализовано здесь: https://github.com/boostorg/geometry/blob/master/include/boost/geometry/algorithms/detail/disjoint/segment_box.hpp. Тогда вы, возможно, найдете соответствующее место в Boost 1.54 и поместите этот код там. Хотя AFAIR структура каталогов и файлов была изменена с 1.54. Я думаю, вы могли бы также попытаться использовать весь код Boost.Geometry 1.59 с Boost 1.54, хотя, конечно, не гарантируется, что он будет работать. И как @sehe указал в комментариях, есть ошибка в disjoint/intersects для комбинации Коробка / Сегмент в 1,59.

Если QueryGeometry не был видом геометрии, поддерживаемой библиотекой, как, например, AFAIU, например Frustum, Cone, Plane, Ray и т. Д., Вы можете просто перегрузить bg::intersects() или же bg::disjoint() для комбинации типов, которые rtree хотел бы вызвать, в данном случае для вашей QueryGeometry и Box. См. Это для получения дополнительной информации: Boost Geometry / Spatial Query Shapes

Другие вопросы по тегам