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

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


person thb    schedule 13.10.2015    source источник
comment
см. очень связанные: stackoverflow.com/questions/32457920/; есть начало обсуждения связанного списка рассылки boost. Может ты сможешь взвесить   -  person sehe    schedule 13.10.2015
comment
Взвешивать? Если вы ссылаетесь на некоторые глюки, я упоминал о повышении 1.59. пересечения разделов, вероятно, я распознал корень проблемы, однако я не вижу четкого способа ее исправить. Чтобы сделать его универсальным для всех мыслимых размеров, потребовалось бы какое-то волшебство шаблонов, которое я не могу осмыслить. Проблема, как я вижу, кроется в алгоритмах \ segment_intersection.hpp :: box_segment_intersection :: apply. Я думаю, что его нельзя так просто разложить по измерениям. Но как обычно - может, я не прав ...   -  person thb    schedule 13.10.2015
comment
Кстати, мне также понадобится пересечение плоскостей. Что ж, как только я вычислил пересечение отрезков, это было бы просто аналогией.   -  person thb    schedule 13.10.2015
comment
Я также забываю сказать слова «пожалуйста» и «привет» в своем вопросе. Я прошу прощения...   -  person thb    schedule 13.10.2015


Ответы (1)


Если вы передаете предикат bgi::intersects() в запрос, rtree внутренне вызывает bg::intersects(), который вызывает bg::disjoint(). И эти проверки пространственных отношений проверяются для QueryGeometry / Box и QueryGeometry / Indexable. Например. если вы храните Boxes, тогда rtree внутренне вызывает 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. Я думаю, вы также можете попробовать использовать весь код 1.59 Boost.Geometry с Boost 1.54, хотя, конечно, нет гарантии, что это сработает. И как @sehe указал в комментариях, есть ошибка в _6 _ / _ 7_ для комбинации Box / Segment в 1.59.

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

person Adam Wulkiewicz    schedule 14.10.2015