Ho un motore di fisica 2D di base in esecuzione. È praticamente un motore a particelle, utilizza solo forme di base come AABB e cerchi, quindi non è possibile alcuna rotazione. Ho implementato un CCD in grado di fornire un TOI accurato per due oggetti in rapido movimento e tutto funziona senza intoppi.
Il mio problema ora è che non riesco a capire come determinare se due oggetti in rapido movimento debbano persino essere controllati uno contro l'altro in primo luogo. Sto usando un albero quad per il partizionamento spaziale e per ogni oggetto in rapido movimento, lo controllo contro gli oggetti in ogni cella che passa. Funziona bene per determinare la collisione con la geometria statica, ma significa che qualsiasi altro oggetto in rapido movimento che potrebbe scontrarsi con esso, ma che non si trova in nessuna delle celle controllate, non viene mai considerato.
L'unica soluzione a cui riesco a pensare è o avere le cellule abbastanza grandi e incrociare le dita che questo è abbastanza, o implementare una sorta di algoritmo di forza bruta. Esiste un modo corretto di affrontarlo, forse qualcuno ha risolto questo problema in modo efficiente. O forse c'è un modo migliore di partizionare lo spazio che tiene conto di questo?
Ecco un diagramma:
Le "aree di effetto" degli oggetti A e B devono essere incrociate. Ma con il modo in cui sto attualmente controllando le collisioni non tiene conto di questo. Ancora una volta, posso pensare ad alcune soluzioni come quella di verificare se i percorsi degli oggetti si incrociano una volta che la loro velocità è superiore a x, o qualcosa del genere, ma sembra un hack ed è un casino da provare e implementare.