Estou tentando implementar a forma mais simples possível de navegação proporcional , ou seja, o míssil gira na direção em que seu rumo ao alvo está mudando e, uma vez que o rumo ao alvo é imutável, ele está em um curso de interceptação.
Então, eu tenho um míssil 2D movendo-se a uma velocidade constante na direção em que está voltado, o que pode girar a uma taxa constante, e a cada intervalo eu atualizo o míssil com 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
O problema é que o míssil sempre oscila em sua direção de lançamento, porque assim que o míssil gira pela primeira vez, isso reverte o sinal de TargetBearingDelta, fazendo com que ele gire na direção oposta e assim por diante ...
Qual é a maneira mais simples de resolver esse problema? Tenho certeza de que estou perdendo algo simples.
Pergunta relacionada ao StackOverflow: Como criar um "míssil de interceptação" para um jogo?
Para reiterar, estou interessado especificamente na implementação do algoritmo de navegação proporcional , não nos algoritmos de retorno em geral.
Atualização: Eu acho que a resposta óbvia é não verificar o rumo e ajustar o rumo a cada turno, mas alternar entre os dois. Eu vou tentar isso.