Quale metodo è preferito per la memorizzazione di oggetti geometrici di grandi dimensioni in un quadrifoglio?


15

Quando si posizionano oggetti geometrici in un quadrifoglio (o ottetto), è possibile posizionare oggetti più grandi di un singolo nodo in alcuni modi:

  1. Posizionamento del riferimento dell'oggetto in ogni foglia per cui è contenuto
  2. Posizionamento del riferimento dell'oggetto nel nodo più profondo per il quale è completamente contenuto
  3. Sia # 1 che # 2

Per esempio:

inserisci qui la descrizione dell'immagine

In questa immagine, è possibile posizionare il cerchio in tutti e quattro i nodi foglia (metodo n. 1) o solo nel nodo radice (metodo n. 2) o in entrambi (metodo n. 3).

Ai fini dell'interrogazione del quadtree, quale metodo è più comune e perché?


1
Certamente dovrebbe essere un riferimento. Intendo chiedere se, ai fini dell'interrogazione del quadrifoglio, ci siano riferimenti nelle foglie, nelle non foglie o in entrambi.
— nsantorello,

PS Modificato per rendere più chiare le intenzioni della domanda.
— nsantorello,

Qual è la query che stai cercando di supportare?
— Joe

@Joe Sono particolarmente interessato al rilevamento delle collisioni, all'indicizzazione spaziale e all'abbattimento di regioni / frustum.
— nsantorello,

1
@nsantorello La regola potrebbe essere diversa a seconda di quale di queste query si desidera supportare, ma questo sembra molto rilevante per il rilevamento delle collisioni: stackoverflow.com/questions/4434335/…
— Joe

Risposte:


8

Supponendo che si stia memorizzando un riferimento, non l'oggetto stesso, può avere senso farlo in modo diverso a seconda dell'applicazione.

Ad esempio, se stavi calcolando le collisioni con questo cerchio (solido) e la collisione si verificasse nell'angolo in basso a sinistra, sarebbe più facile se tu avessi accesso a tutta la geometria in quella foglia direttamente da quella foglia (metodo n. 3) (senza dover attraversare l'albero verso l'alto e determinare la geometria ereditata). Ma, supponiamo che tu stia usando i quadrifici per disegnare la geometria, vorresti usare il metodo n. 1, perché ha senso disegnare qualcosa nel nodo per il quale è completamente contenuto (sarebbe più difficile capire quale porzione disegnare per ogni nodo foglia e dove).

Per quanto riguarda ciò che è più comune, la mia unica esperienza con i quadrifici è con la scrittura di una simulazione n-body in cui gli oggetti geometrici erano in realtà solo punti che non avevano area, quindi non posso rispondere definitivamente.


Grazie Rafe, penso che tu abbia ragione che dipende dall'applicazione.
— nsantorello,

6

Uno dei vantaggi di un Quadtree è che non è necessario dividere un nodo nei suoi nodi figlio se tutti i nodi figlio contengano le stesse informazioni. Ciò può farti risparmiare molta memoria e velocizzare l'elaborazione.

Seguendo questo principio, penso che abbia più senso memorizzarlo solo nel nodo radice (metodo n. 2). Potrebbe farti risparmiare un sacco di memoria e penso che faciliterebbe anche l'elaborazione. Ad esempio, se si è tentato di trovare le intersezioni del cerchio con una linea che attraversa tre dei nodi foglia, è necessario calcolare l'intersezione separatamente per ciascun nodo foglia o ricordare che si è già intersecato con questo cerchio.

D'altra parte, se hai oggetti nei nodi foglia, potrebbe aiutarti a eliminare i falsi positivi (oggetti che devi controllare per l'intersezione, perché si trovano nel nodo corretto, ma che in realtà non si intersecano).

Quindi, penso che entrambi gli approcci abbiano i loro usi e non sono sicuro di come scegliere quale usare.

Probabilmente non userei l'approccio n. 3, perché non vedo alcun aspetto positivo al riguardo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.