Che cosa significa "in costante movimento"?
Per esempio, se questi punti rappresentano particelle che si muovono con una velocità costante e sono influenzate solo dalla collisione con la sfera dura con altre particelle e con il muro, allora è possibile calcolare il tempo di intersezione di ogni particella con il riquadro di delimitazione, e calcolare il tempo per la prossima collisione. Il tempo per l'intersezione successiva può essere mantenuto in una coda di priorità e quando si verifica un'intersezione o una collisione, è necessario solo calcolare, nel tempo O (n), l'intersezione successiva di quella particella / quelle particelle con ogni altra particella.
I meccanismi di questo sono delineati in link e riassunti prima da Karl Bielefeldt.
Se il movimento è casuale, ma i cambiamenti sono piccoli e limitati, c'è un limite massimo su quanto possono muoversi le cose. Usalo come un limite. Ad esempio, se la velocità massima è di 0,1 unità per valutazione e il riquadro di delimitazione è la cella (10,10) - (11,11), puoi facilmente determinare le particelle all'interno di, diciamo, 10 unità di quella cella e sapere che non c'è modo che nessuna altra particella possa raggiungere quella cella per 100 valutazioni.
Se le coordinate cambiano drasticamente ogni volta, allora la ricerca lineare O (n) è la soluzione migliore perché qualsiasi struttura dati (quadtree, griglia hash, ecc.) richiede almeno O (n) tempo per impostare, se solo perché ha bisogno di visitare ogni punto.