Quadtree для обнаружения 2D-столкновений

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

При проверке объекта на коллизии в дереве , Я бы сделал что-то вроде этого (спасибо QuadTree за обнаружение двухмерных столкновений ):

  1. Проверить объект на столкновения с любыми объектами в текущем узле.
  2. Для любого поддерева, пространство которого перекрывает объект , recurse.

Чтобы найти все коллизии в дереве квадродерева:

  1. Сравните каждый объект в текущем узле с другим объектом в текущем узле.
  2. Проверить каждый объект в текущем узле на соответствие каждому поддереву.

Чтобы вставить в квадродерево:

  1. Если объект входит в несколько поддеревьев, добавьте его в текущий узел и вернитесь.
  2. В противном случае, рекурсию в любое поддерево, содержащее его.

Для обновления квадродерева:

  1. Рекурсия в каждое поддерево.
  2. Если какой-либо элемент в текущем узле больше не помещается полностью в текущем дереве, переместите его в родительский.
  3. Если какой-либо элемент в текущем узле помещается в поддерево, вставьте его в поддерево.

Это нормально? Можно ли его улучшить?

32
задан Community 23 May 2017 в 12:34
поделиться