Mi è stato detto che un albero quad è la struttura dati ideale per il mio gioco, ma ho difficoltà a capire come funzionano esattamente le forme all'interno degli alberi quad.
Lo sto facendo in JavaScript, ma penso che queste domande potrebbero applicarsi ai quad alberi in qualsiasi lingua.
Credo soprattutto capire come (x, y) di base punti e inserimento punto opere in alberi quad, e che ho potuto farlo su carta.
Ecco un JSfiddle della mia sperimentazione di punti.
A parte un caso, i miei test con i punti funzionano come previsto.
Ma la mia confusione inizia quando sono coinvolte forme come rettangoli. Quando stai recuperando da un albero quad con forme, controlla ogni punto della forma e in quali nodi rientrano? E come funzionano anche gli inserimenti di forme, quando accetta i parametri (x, y, larghezza, altezza) per ogni forma? Usa la larghezza / altezza dal punto iniziale per calcolare altri punti d'angolo, che vengono quindi distribuiti in nodi appropriati? Se una forma inserita si estende in quattro nodi, i dati di quella forma vengono salvati in tutti e quattro i nodi?
E quando un metodo di recupero accetta una forma come parametro (x, y, larghezza, altezza), cosa sta realmente succedendo? Sta prima vedendo a quali nodi si estenderebbe la forma se dovesse essere inserita, e quindi recupererà tutti gli oggetti di quei nodi?
Ho un JSfiddle che lavora con le forme , ma sono completamente confuso sui risultati dei miei test. Ricevo oggetti duplicati restituiti!
Ad esempio, il quadrato rosso è un equivalente disegnato dei parametri che sto inserendo nel mio metodo di recupero. Penserei che, dato che questo quadrato rosso si estende su tutti e quattro i nodi, dovrebbe restituire ogni oggetto nel quad! Ma non è così e ho problemi a razionalizzare ciò che restituisce. Ho una serie di altri test che sono attualmente commentati, ma è possibile annullare il commento ed eseguirli per vedere risultati più confusi!
Come dire, se voglio restituire tutti i punti in un albero quad, come potrei farlo? Un metodo di recupero che utilizza una forma dell'intera dimensione dei limiti? Ad esempio, recuperare (0, 0, canvas.width, canvas.height)?
La libreria JavaScript QuadTree che sto usando è stata citata da varie altre fonti, quindi presumo che l'implementazione effettiva sia corretta e affidabile.
Penso che molta della mia confusione possa derivare da un malinteso sulla terminologia dei quad tree. Ad esempio, perché dicono limiti anziché dimensioni, quando un "punto" ha anche parametri larghezza / altezza? È una questione di convenzione / di breve durata o sono concetti completamente diversi?
Grazie per il tuo tempo!
_stuckChildren
campo nel codice. Puoi anche vedere questo nell'esempio "recupero di elementi con limiti": evidenzia sempre in rosso i nodi che si trovano a cavallo dei bordi dei nodi in cui hai fatto clic, fino al nodo principale.