Estoy tratando de implementar la forma más simple posible de navegación proporcional , es decir, el misil gira en la dirección en que cambia su rumbo hacia el objetivo, y una vez que su rumbo hacia el objetivo no cambia, está en curso de intercepción.
Entonces, tengo un misil 2d moviéndose a una velocidad constante en la dirección que está mirando, que puede girar a una velocidad constante, y cada intervalo actualizo el misil con algo como:
Position += VectorProduct (Direction * Speed * TimePassed)
PreviousTargetBearing = TargetBearing
TargetBearing = AngleBetween(TargetPosition, Position)
TargetBearingDelta = TargetBearing - PreviousTargetBearing
If TargetBearingDelta > 0: MissileDirection += TurnRate * TimePassed
If TargetBearingDelta < 0: MissileDirection -= TurnRate * TimePassed
El problema es que el misil siempre oscila alrededor de su dirección de lanzamiento, porque tan pronto como el misil gira por primera vez, esto invierte el signo de TargetBearingDelta, haciéndolo girar en la dirección opuesta, y así sucesivamente ...
¿Cuál es la forma más simple de resolver este problema? Estoy seguro de que me falta algo simple.
Pregunta relacionada de StackOverflow: ¿Cómo crear un "misil de intercepción" para un juego?
Para reiterar, estoy interesado específicamente en implementar el algoritmo de navegación proporcional , no en los algoritmos de referencia en general.
Actualización: supongo que la respuesta obvia es no verificar el rumbo y ajustar el rumbo cada turno, sino alternar entre los dos. Lo intentaré