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.