Я пытаюсь использовать дерево квадрантов для обнаружения 2D-столкновений, но я немного не понимаю, как его реализовать. Прежде всего, у меня было бы квадродерево, содержащее четыре поддерева (по одному, представляющее каждый квадрант), а также набор объектов, которые не помещаются в одно поддерево.
При проверке объекта на коллизии в дереве я бы сделал что-то вроде этого (спасибо QuadTree for 2D обнаружение столкновений):
- Проверьте объект на предмет столкновений с любыми объектами в текущем узле.
- Для любого поддерева, пространство которого перекрывает объект, используйте рекурсию.
Чтобы найти все столкновения в дереве квадрантов:
- Сравните каждый объект в текущем узле с другим объектом в текущем узле.
- Проверяйте каждый объект в текущем узле на каждое поддерево.
Чтобы вставить в квадродерево:
- Если объект умещается в несколько поддеревьев, добавьте его в текущий узел и вернитесь.
- В противном случае выполните рекурсию в то поддерево, которое его содержит.
Чтобы обновить дерево квадрантов:
- Рекурсия в каждое поддерево.
- Если какой-либо элемент в текущем узле больше не умещается полностью в текущем дереве, переместите его в родительский.
- Если какой-либо элемент в текущем узле помещается в поддерево, вставьте его в поддерево.
Это нормально? Можно ли это улучшить?