2D поиск ближайшего соседа для движущихся точек

Я хочу симулировать стадо, как описано здесь.

Для этого мне нужно искать ближайших соседей каждой из моих 2D точек. Однако я не могу использовать статическую структуру данных, такую ​​как дерево k-d, потому что точки всегда перемещаются...

Какая хорошая (простая) структура данных/библиотека способна достичь этого? Я работаю с С++...


person Jan Rüegg    schedule 07.08.2011    source источник
comment
Вы можете получить некоторые идеи из stackoverflow .com/questions/6871682/   -  person Don Reba    schedule 07.08.2011


Ответы (2)


Может быть, вы хотите попробовать дерево квадрантов или пространственный индекс? В чем проблема с деревом k-d? В основном, когда у края стадо/точки, вы можете пропустить проверку столкновения с краями далеко. Пространственный индекс может быть деревом квадрантов, r-деревом, kd-деревом или гильбертовым r-деревом. Лучший ответ можно прочитать здесь: Приблизительный инкрементный алгоритм ближайшего соседа для движущиеся тела

«То есть рекурсивно разбить «мир» на граф с четырьмя подузлами в каждом. Затем дерево может быстро проверить, какие объекты находятся внутри определенного квадрата мира, и отбросить остальные. Очень эффективный метод отбраковки, часто используемый для повышения производительности обнаружение столкновений в играх».

person Gigamegs    schedule 07.08.2011
comment
Разве дерево k-d (или дерево квадрантов, если уж на то пошло) не статично? Это означает, что вы должны перестраивать его на каждом этапе после того, как все точки были перемещены? - person Jan Rüegg; 07.08.2011
comment
Идея дерева квадрантов состоит в том, чтобы уменьшить сложность 2d до сложности 1d. Когда вы рекурсивно проходите дерево в глубину или в ширину, становится простой задачей заполнить все дерево? - person Gigamegs; 07.08.2011
comment
Думаю, quadtree подойдет. Тем не менее, простое перебор всех соседей показалось мне достаточно быстрым... - person Jan Rüegg; 28.11.2012