Sto cercando di implementare la forma più semplice possibile di navigazione proporzionale , cioè il missile gira nella direzione in cui sta cambiando il suo rilevamento da bersaglio a bersaglio, e una volta che il suo rilevamento da bersaglio a bersaglio è immutabile, è su una rotta di intercettazione.
Quindi, ho un missile 2D che si muove a una velocità costante nella direzione in cui è rivolto, che può girare a una velocità costante, e ad ogni intervallo aggiorno il missile con qualcosa del tipo:
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
Il problema è che il missile oscilla sempre attorno alla sua direzione di lancio, perché non appena il missile gira la prima volta, questo inverte il segno di TargetBearingDelta, facendolo poi girare nella direzione opposta e così via ...
Qual è il modo più semplice per risolvere questo problema? Sono sicuro che mi manca qualcosa di semplice.
Domanda StackOverflow correlata: come creare un "missile intercetta" per un gioco?
Per ribadire, sono interessato in modo specifico all'implementazione dell'algoritmo di navigazione proporzionale , non agli algoritmi di homing in generale.
Aggiornamento: immagino che la risposta ovvia sia non controllare il rilevamento e regolare la rotta ad ogni giro, ma alternare tra i due. Ci proverò.