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