Ich versuche, die einfachste Form der proportionalen Navigation zu implementieren , dh die Rakete dreht sich in die Richtung, in die sich ihre Peilung zum Ziel ändert, und sobald sich ihre Peilung zum Ziel nicht mehr ändert, befindet sie sich auf einem Abfangkurs.
Ich habe also eine 2D-Rakete, die sich mit einer konstanten Geschwindigkeit in die Richtung bewegt, in die sie zeigt, die sich mit einer konstanten Geschwindigkeit drehen kann, und in jedem Intervall aktualisiere ich die Rakete mit etwas wie:
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
Das Problem ist, dass die Rakete immer um ihre Startrichtung schwingt, denn sobald sich die Rakete das erste Mal dreht, kehrt dies das Vorzeichen von TargetBearingDelta um und dreht sich dann in die entgegengesetzte Richtung und so weiter ...
Wie kann ich dieses Problem am einfachsten lösen? Ich bin sicher, ich vermisse etwas Einfaches.
Verwandte StackOverflow-Frage: Wie erstelle ich eine "Intercept Missile" für ein Spiel?
Um es noch einmal zu wiederholen, ich bin speziell an der Implementierung des proportionalen Navigationsalgorithmus interessiert , nicht an Referenzierungsalgorithmen im Allgemeinen.
Update: Ich denke, die offensichtliche Antwort ist, nicht in jeder Umdrehung die Peilung zu überprüfen und den Kurs anzupassen, sondern zwischen den beiden zu wechseln. Ich werde das versuchen.