Estoy tratando de usar un quadtree para la detección de colisiones 2D, pero estoy un poco perplejo sobre cómo implementarlo. En primer lugar, tendría un quadtree que contiene cuatro subárboles (uno que representa cada cuadrante), así como una colección de objetos que no encajan en un solo subárbol.Quadtree para detección de colisiones 2D
Al comprobar un objeto de colisiones en el árbol, me gustaría hacer algo como esto (gracias a QuadTree for 2D collision detection):
- Compruebe el objeto de colisiones con objetos en el nodo actual.
- Para cualquier subárbol cuyo espacio se solape con el objeto, recurse.
permite encontrar todos colisiones dentro de un árbol árbol cuádruple:
- Comprobar cada objeto en el nodo actual uno contra el otro objeto en el nodo actual.
- Compruebe cada objeto en el nodo actual contra cada subárbol.
para insertar en un árbol de cuatro ramas:
- Si el objeto encaja en múltiples sub-estructuras, luego añadirlo al nodo actual, y volver.
- De lo contrario, recurse en el subárbol que lo contenga.
para actualizar un árbol de cuatro ramas:
- Recurse en cada sub-árbol.
- Si algún elemento en el nodo actual ya no cabe completamente en el árbol actual, muévalo al padre.
- Si algún elemento en el nodo actual cabe en un subárbol, insértelo en el subárbol.
¿Esto está bien? ¿Se puede mejorar?
Impleméntelo de la manera en que lo describe, lo hice de la manera en que lo hizo Dave O. Esto es más fácil de codificar y es más rápido. Administrar más listas para realizar un seguimiento de todas las hojas de su cuenta agrega gastos indirectos evitables. Aquí está la fuente (en Java) para una de mis versiones: [Steerio] (https://github.com/ClickerMonkey/steerio/blob/master/Java/src/org/magnos/steer/spatial/quad/SpatialQuadNode. java) – ClickerMonkey