Estoy tratando de comprender e implementar el mecanismo de un sistema totalmente en 3D para evitar colisiones (comportamiento de dirección) para el movimiento de vuelo (seis grados de libertad), actualmente enfocado en sortear obstáculos estáticos (todo con la forma de una esfera).
Sin embargo, no entiendo cómo descifrar el nuevo vector de velocidad del agente en movimiento. La siguiente figura ilustra la escena. El agente móvil (verde) tiene que dirigir tres objetos estáticos (azul). La línea roja representa el vector de velocidad inicial inicial.
Tenga en cuenta que también hay tres conos blancos / semitransparentes. Estos representan los "vectores de velocidad prohibidos" con respecto a cada obstáculo. Significa, el conjunto de vectores de velocidad que, si se usan como los nuevos vectores delanteros del agente, harían que el agente chocara con uno o más de los obstáculos (también tenga en cuenta que el radio de cada cono es igual al radio del obstáculo dado más el radio del agente, para permitir un desplazamiento para que el jugador pueda maniobrar).
Para descubrir el nuevo vector adelantado del agente en movimiento en dicho entorno 3D, considerando los tres obstáculos, un enfoque ingenuo sería simplemente portar a 3D la solución clásica explicada en este artículo a menudo citado y ejemplificada por la siguiente imagen 2D:
Allí, una nueva velocidad (flecha naranja) simplemente se calcula normalizando la distancia mínima (flecha negra) entre la velocidad original y el centro del obstáculo y luego multiplicando dicha normal por la suma entre el radio del obstáculo y el radio del agente de mudanzas Luego, un promedio de las nuevas velocidades calculadas para cada uno de los obstáculos daría la velocidad final total.
En muchos casos, eso es suficiente. Sin embargo, eche un vistazo a los siguientes casos (ejemplificados en 2D para facilitar la visualización):
En todos ellos, el enfoque ingenuo dará lugar a una colisión. En ayb, la nueva velocidad final coincidirá con la velocidad original (flecha roja) y el agente en movimiento avanzará a pesar de estar parcial o totalmente bloqueado. En c) yd), la nueva velocidad (flecha naranja) seguirá teniendo la misma consecuencia.
Entonces, mi pregunta es: ¿cuál es la forma más eficiente desde el punto de vista computacional de descubrir el nuevo vector adelantado del agente en movimiento en dicho entorno 3D, teniendo en cuenta los tres obstáculos, de manera que se evite la colisión? O, en otras palabras, el nuevo vector adelantado que:
1) no está dentro de ninguno de los conos;
2) es el más cercano posible al vector de avance original (línea roja en la imagen).
PD: Preferiblemente, no estoy buscando una biblioteca, estoy buscando aprender cómo hacerlo.