Me han dicho que un árbol cuádruple es la estructura de datos ideal para mi juego, pero tengo problemas para entender cómo funcionan exactamente las formas dentro de los árboles cuádruples.
Estoy haciendo esto en JavaScript, pero creo que estas preguntas podrían aplicarse a los árboles cuádruples en cualquier idioma.
Creo que entiendo principalmente cómo funcionan los puntos básicos (x, y) y la inserción de puntos en los árboles cuádruples, y que podría hacerlo en papel.
Aquí hay un JSfiddle de mi experimentación con puntos.
Aparte de un caso, mis pruebas con puntos funcionan como se esperaba.
Pero mi confusión comienza cuando están involucradas formas como rectángulos. Cuando está recuperando de un árbol cuádruple con formas, ¿verifica cada punto de la forma y en qué nodos caen? ¿Y cómo funcionan incluso las inserciones de formas, cuando acepta parámetros (x, y, ancho, alto) para cada forma? ¿Utiliza el ancho / alto desde el punto de partida para calcular otros puntos de esquina, que luego se distribuyen en los nodos apropiados? Si una forma insertada se extiende en cuatro nodos, ¿se guardan los datos de esa forma en los cuatro nodos?
Y cuando un método de recuperación acepta una forma como parámetro (x, y, ancho, alto), ¿qué está pasando realmente? ¿Es primero ver a qué nodos abarcaría la forma si se insertara y luego recuperar todos los objetos de esos nodos?
Tengo un JSfiddle que trabaja con formas , pero estoy completamente confundido con los resultados de mis pruebas. ¡Me devuelven objetos duplicados!
Por ejemplo, el cuadrado rojo es un equivalente dibujado de los parámetros que estoy ingresando en mi método de recuperación. ¡Creo que, dado que este cuadrado rojo abarca los cuatro nodos, debería devolver cada objeto en el árbol cuádruple! Pero no lo hace, y estoy teniendo problemas para racionalizar lo que devuelve. Tengo una serie de otras pruebas que actualmente están comentadas, pero puedes descomentarlas y ejecutarlas para ver resultados más confusos.
Como digo, si quiero devolver todos los puntos en un árbol cuádruple, ¿cómo lo haría? ¿Un método de recuperación usando una forma del tamaño completo de los límites? Por ejemplo, recuperar (0, 0, canvas.width, canvas.height)?
La biblioteca de JavaScript árbol cuádruple estoy usando ha sido mencionado por varias otras fuentes, así que supongo que la implementación real es correcta y de buena reputación.
Creo que gran parte de mi confusión puede deberse a un malentendido de la terminología del árbol cuádruple. Por ejemplo, ¿por qué dicen límites en lugar de dimensiones, cuando un "punto" también tiene parámetros de ancho / alto? ¿Es una cuestión de convención / abreviatura, o son conceptos completamente diferentes?
¡Gracias por tu tiempo!
_stuckChildren
campo en el código. También puede ver esto en la muestra de "recuperación de elementos con límites": siempre resalta en rojo los nodos que se extienden a horcajadas en los bordes de los nodos en los que hizo clic, hasta el nodo raíz.