Tengo un misil que persigue el comportamiento para rastrear (y tratar de impactar) su objetivo (estacionario).
Funciona bien, siempre y cuando no estés atacando cuando lanzas el misil. Si estás atacando, el misil tiende a orbitar a su objetivo.
Arreglé esto acelerando tangencialmente al objetivo primero , matando primero el componente tangencial de la velocidad y luego dirigiéndome hacia el objetivo.
Así que aceleré en -vT hasta que vT sea casi 0. Luego aceleré en la dirección de vN.
Mientras eso funciona, estoy buscando una solución más elegante donde el misil pueda impactar al objetivo sin matar explícitamente el componente tangencial primero.
steering-behaviors
orbit
bobobobo
fuente
fuente
Respuestas:
Parece que el problema es que el misil simplemente apunta al objetivo sin tener en cuenta su velocidad actual. Asigne a su misil un ángulo máximo por el cual el empuje puede desviarse de la línea de movimiento.
En cada iteración de guía, calcula su velocidad perpendicular al objetivo. Calcule cuánto debe inclinar su motor para poner a cero este componente de su velocidad y luego recorte esto al máximo que pueda inclinar su motor.
Durante la primera parte de su vuelo, se moverá un poco a la derecha de la línea recta en la figura # 2, pero a medida que vuela, el motor pondrá a cero este componente y terminará yendo directamente hacia el objetivo.
Tenga en cuenta que en este escenario solo habrá un cuadro en el que el motor tiene una desviación de cualquier cosa que no sea cero o máximo. Si seguías un objetivo en movimiento, podrías obtener desviaciones menores en cada ciclo a medida que el objetivo se movía.
fuente
Puede que no sea la solución elegante que busca, pero descubrí que si ralentizo el misil, si va a fallar, a medida que se acerca al objetivo, efectivamente sigue y gira más rápido y puede golpear el objetivo. Podrías aumentar la velocidad de giro del misil a medida que se acerca, en lugar de reducir la velocidad, pero esto podría dar a los jugadores una sorpresa desagradable 'wow, estoy seguro de que iba a perder'.
Puede que esto no se vea tan bien, pero ciertamente evita que los misiles orbiten y que el enemigo aplaste el misil hasta que se agote el combustible.
Aquí hay una demostración que he reunido de mi implementación (el tercer o cuarto misil lo demuestra, y nuevamente a la 1:05): http://www.youtube.com/watch?v=9uiGMC_nH2w
También puede aumentar la precisión del misil a medida que se acerca al objetivo también (ya que tiene una firma más cercana para bloquear). Esto se muestra en el video también alrededor de un minuto. El círculo rojo muestra el objetivo real del misil. Esto le da una ruta de vuelo caótica cuando está a una distancia larga, y luego se endereza cuanto más se acerca.
Como digo, puede que no sea la respuesta que está buscando, pero espero que sea de ayuda un poco.
fuente
Intuición
Aquí hay una manera: Rotemos su diagrama.
¡Ahora el cohete es una bala de cañón !
Física
Tiene una aceleración fija "hacia abajo", es decir, perpendicular al vector desde su ubicación de disparo hasta su objetivo. Lo dibujé arriba como una línea verde discontinua. Llamemos a eso el horizonte de referencia . (¡Tenga en cuenta que este horizonte de referencia es constante! El cohete se disparó desde una posición fija con una posición fija como objetivo).
Sabemos (de Wikipedia ) para una bala de cañón sin resistencia del aire, que
d = v^2 * sin(2 * theta) / g
, donded
es la distancia horizontal recorrida (distancia entre la ubicación de disparo y el objetivo)v
es la velocidad a la que se disparó el proyectiltheta
es el ángulo con respecto al horizonte al que se disparó el proyectil ( vector de ángulo de disparo desde el horizonte de referencia )Reorganizando la ecuación para
g
darg = v^2 * sin(2 * theta) / d
.La constante en la ecuación de bala de cañón
g
, es la aceleración debido a la gravedad . Podemos tomarlo como una aceleración debido a la propulsión del cohete . Eso también está bien: sigue siendo una aceleración constante en una dirección constante .¿Ahora que?
Ejecuta esa ecuación para
g
cuando dispares el cohete. Te dirá cuánto acelerar el cohete perpendicularmente hacia el horizonte de referencia, para alcanzar el objetivo. Como la dirección de esa aceleración es constante, no se formará una órbita.Auge.
fuente