Я пытаюсь реализовать простейшую из возможных форм пропорциональной навигации , то есть ракета поворачивается в направлении, в котором изменяется ее отношение к цели, и как только ее отношение к цели не меняется, она находится на пути перехвата.
Итак, у меня есть двумерная ракета, движущаяся с постоянной скоростью в направлении, в котором она находится, которая может вращаться с постоянной скоростью, и каждый интервал я обновляю ракету чем-то вроде:
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
Проблема в том, что ракета всегда колеблется вокруг направления запуска, потому что, как только ракета поворачивается в первый раз, это меняет знак TargetBearingDelta, заставляя ее вращаться в противоположном направлении, и так далее ...
Как проще всего решить эту проблему? Я уверен, что упускаю что-то простое.
Связанный вопрос StackOverflow: Как создать «ракету-перехват» для игры?
Повторюсь, я заинтересован именно в реализации алгоритма пропорциональной навигации , а не в алгоритмах самонаведения в целом.
Обновление: я предполагаю, что очевидный ответ - не проверять направление и корректировать курс на каждом повороте, а переключаться между ними. Я попробую это.