J'essaie de mettre en œuvre la forme de navigation proportionnelle la plus simple possible , c'est-à-dire que le missile tourne dans la direction dans laquelle son relèvement vers la cible change, et une fois que son relèvement vers la cible ne change pas, il est sur une trajectoire d'interception.
Donc, j'ai un missile 2D se déplaçant à une vitesse constante dans la direction à laquelle il fait face, qui peut tourner à une vitesse constante, et à chaque intervalle, je mets à jour le missile avec quelque chose comme:
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
Le problème est que le missile oscille toujours autour de sa direction de lancement, car dès que le missile tourne la première fois, cela inverse le signe de TargetBearingDelta, le faisant ensuite tourner dans la direction opposée, etc.
Quelle est la manière la plus simple de résoudre ce problème? Je suis sûr que je manque quelque chose de simple.
Question StackOverflow connexe: Comment créer un «missile d'interception» pour un jeu?
Pour réitérer, je m'intéresse spécifiquement à la mise en œuvre de l' algorithme de navigation proportionnelle , et non aux algorithmes de référencement en général.
Mise à jour: je suppose que la réponse évidente est de ne pas vérifier le relèvement et d' ajuster le cap à chaque virage, mais d'alterner entre les deux. Je vais essayer ça.