Исключением из этого в физике может быть случай, когда вы имеете дело с объектами, у которых нет объема, такими как частицы или фотоны, построение дерева kd упрощается тем, что вам не нужно разрешать границы отдельных примитивов. , Это действительно зависит от приложения. Хороший физический движок должен использовать сбалансированную комбинацию структур пространственного ускорения, это обычная практика - разрешать более широкое фазовое разбиение, скажем, с малым октодеревом, а затем расширять конечные узлы с помощью другой схемы, которая лучше соответствует характеру того, что вы делаете, BSP идеально подходят для статическая геометрия, особенно в 2D и когда структура не меняется, лучше всего поэкспериментировать с как можно большим количеством различных схем и структур и понять, как и когда они работают лучше всего.

тоящее время я пишу KDTree для физического движка (проект Hobby).

KDTree не содержит точек. Вместо этого он содержит ограничивающие прямоугольники с выравниванием по оси, которые связывают различные объекты в среде.

Моя проблема заключается в том, чтобы решить, как разделить узлы KDTree, когда они заполнятся. Я пробую 2 метода:

Метод 1: Всегда делить узел ровно пополам по самой большой оси.

Это имеет преимущество довольно равномерно разнесенного дерева.Большой недостаток: если объекты сосредоточены в небольшой области узла, будут созданы избыточные подразделения. Это потому, что все тома разделены ровно пополам.

Метод 2: Найти область узла, который содержит объекты. Разделите узел на плоскости, которая разделяет эту область пополам по его наибольшей оси. Пример. Если все объекты сосредоточены в нижней части узла, то он делится по длине, тем самым разделяя дно на две части.

Это решает проблему с методом вышеПри индексации чего-либо, существующего в одной плоскости (например, рельеф), создаются длинные и узкие узлы. Если позже я добавлю некоторые другие объекты, которые не находятся на одной плоскости, эти удлиненные узлы обеспечивают очень плохую индексацию.

Так что я ищу лучший способ разделить мой узел KD-Tree. Учитывая, что это будет физический движок, решение должно быть достаточно простым, чтобы принимать его в режиме реального времени.

Ответы на вопрос(2)

Ваш ответ на вопрос