Sto cercando di comprendere e attuare il meccanismo di un sistema di prevenzione delle collisioni (comportamento dello sterzo) completamente in 3D per il movimento di volo (sei gradi di libertà), concentrandomi attualmente sull'elusione di ostacoli statici (tutti a forma di sfera).
Tuttavia, non capisco come capire il nuovo vettore di velocità dell'agente in movimento. La figura seguente illustra la scena. L'agente in movimento (verde) deve guidare tre oggetti statici (blu). La linea rossa rappresenta il vettore di velocità iniziale iniziale.
Si noti che ci sono anche tre coni bianchi / semitrasparenti. Questi rappresentano i "vettori di velocità proibiti" riguardanti ogni ostacolo. Significa, l'insieme dei vettori di velocità che, se usato come nuovo vettore di vettori dell'agente, farebbe collidere l'agente con uno o più ostacoli (si noti inoltre che il raggio di ciascun cono è uguale al raggio dell'ostacolo dato più il raggio dell'agente, in modo da consentire un offset per il giocatore di muoversi).
Al fine di scoprire il nuovo vettore in anticipo dell'agente in movimento in tale ambiente 3D, considerando i tre ostacoli, un approccio ingenuo sarebbe semplicemente quello di portare in 3D la classica soluzione spiegata in questo articolo spesso citato ed esemplificata dalla seguente immagine 2D:
Lì, una nuova velocità (freccia arancione) viene semplicemente calcolata normalizzando la distanza minima (freccia nera) tra la velocità originale e il centro dell'ostacolo e quindi moltiplicando tale normale per la somma tra il raggio dell'ostacolo e il raggio del agente in movimento. Quindi, una media delle nuove velocità calcolate per ciascuno degli ostacoli darebbe la velocità finale totale.
In molti casi, è sufficiente. Tuttavia, dai un'occhiata ai casi seguenti (esemplificati in 2D per facilitare la visualizzazione):
In tutti loro, l'approccio ingenuo si tradurrà in una collisione. In aeb, la nuova velocità finale coinciderà con la velocità originale (freccia rossa) e l'agente in movimento si sposterà in avanti nonostante sia parzialmente o completamente bloccato. In c) ed), la nuova velocità (freccia arancione) comporterà comunque la stessa conseguenza.
Quindi, la mia domanda è: qual è il modo più efficiente dal punto di vista computazionale per scoprire il nuovo vettore in anticipo dell'agente in movimento in tale ambiente 3D, considerando i tre ostacoli, in modo da evitare la collisione? O, in altre parole, il nuovo vettore che anticipa che:
1) non è all'interno di nessuno dei coni;
2) è il più vicino possibile al vettore originale in avanti (linea rossa nell'immagine).
PS: Preferibilmente, non sto cercando una biblioteca, sto cercando di imparare come farlo.