структура данных для подвижных точек в 3d

У меня много точек (+100 000) в трехмерном пространстве. Мне нужно использовать запросы ближайшего соседа и диапазона. Сначала я использовал kdtree (k=3), но каждая точка имеет атрибут скорости. Их местоположение не статично, они меняют свое местоположение. Проблема начинается здесь. Легко выполнять запросы ближайшего соседа и диапазона с их старыми местоположениями. Но я должен рассчитать их новые местоположения в соответствии с их скоростью. Я должен найти ближайшего соседа и выполнить поиск в диапазоне после расчета их нового местоположения.

Каждый раз, когда точки меняют свое местоположение, я должен обновлять kdtree, но это дорого. Это замедляет меня. Есть ли у вас какие-либо предложения или есть ли лучшая структура данных для этой ситуации?


person Taha Altuntaş    schedule 28.08.2013    source источник


Ответы (1)


Octtree или octkey могут быть быстрее. Octkey обычно использует кривую Мортона или кривую Гильберта. Он уменьшает размеры и заполняет пространство. Он часто используется в картографическом приложении. Чтобы найти ориентацию в 3D, код Грея может помочь найти правильный квадрант. Вот интересная тема о перемещении объектов: http://xboxforums.create.msdn.com/forums/p/59841/368276.aspx. Он рекомендует дерево квадрантов, связанный список или тройное дерево.

person Gigamegs    schedule 28.08.2013
comment
Я слышал об октодереве, но никогда не слышал о кривой Мортона или кривой Гильберта. Как они решают эту проблему скорости? Буду признателен, если объясните подробнее. - person Taha Altuntaş; 28.08.2013
comment
Я написал кривую Гилберта класса php @ phpclasses.org. вы также можете поискать в Google квадро-ключ для карт Bing для объяснения. Но также может иметь смысл использовать запрос диапазона только для статических объектов. Для других объектов используйте простую структуру данных, такую ​​как связанный список. - person Gigamegs; 28.08.2013