Frage

Ich habe ein Spiel, das ich auf, dass ich arbeiten Raketen in es hat Homing. Im Moment wenden sie sich nur auf ihr Ziel, die ein ziemlich dummes aussehendes Ergebnis erzeugt, wobei alle Raketen nach dem Ziel um.

Ich mag einen tödlichen Geschmack der Rakete zu schaffen, das auf dem Ziel wird, wo das Ziel es dort durch die Zeit „wird“ bekommt, und ich bin ein wenig stecken und verwirrt darüber bekommen, wie es geht.

Ich vermute, ich muß zur Arbeit, wo mein Ziel zu einem bestimmten Zeitpunkt in der Zukunft sein wird (eine Vermutung sowieso), aber ich kann meinen Kopf um nicht bekommen, wie weit nach vorne zu schauen. Es muss je nachdem, wie weit die Rakete vom Ziel entfernt ist, aber das Ziel auch zu bewegen.

Meine Raketen haben einen konstanten Schub, mit einer schwachen Fähigkeit kombiniert zu machen. Die Hoffnung ist, werden sie schnell und aufregend sein, aber lenken wie eine Kuh (dh schlecht, für die nicht HitchHiker-Fans da draußen).

Wie auch immer, schien wie eine Art Spaß Problem für Stack-Überlauf, mir zu helfen zu lösen, so irgendwelche Ideen oder Vorschläge für eine besseren oder „mehr Spaß“ -Raketen alle dankbar empfangen werden würde.

Als nächstes wird nach oben AI sein Ausweichen sie ...

War es hilfreich?

Lösung

Was Sie vorschlagen wird „Befehl Guidance“ genannt, aber es gibt einen einfacheren und besseren Weg.

Die Art und Weise, dass echte Raketen es in der Regel tun (nicht alle gleich sind) wird mit einem System namens Proportional Navigation. Das bedeutet, die Rakete „dreht sich“ in der gleichen Richtung wie die Line-of-sight (LOS) zwischen der Rakete und das Ziel dreht, bei einer Umdrehungsrate „proportional“ auf die LOS-Rate ... Das wird tun, was du bist fragt nach, wie wenn die LOS-Rate Null ist, Sie sind auf Kollisionskurs.

Sie können die LOS-Rate berechnen, indem nur die Steigungen der Strecke zwischen Misile und Ziel von einer Sekunde auf die nächste zu vergleichen. Wenn das Gefälle ändert sich nicht, Sie sind auf Kollisionskurs. wenn es sich verändert, um die Änderung zu berechnen und die Rakete durch eine verhältnismäßig Winkelgeschwindigkeit drehen ... können Sie alle Metriken verwenden, die Rakete und Zielposition darstellen.

Zum Beispiel, wenn Sie eine Proportionalitätskonstante von 2 verwenden, und die LOS nach rechts um 2 Grad / s bewegen, drehen Sie die Rakete nach rechts bei 4 Grad / Sek. LOS nach links bei 6 ° / s, Rakete nach links um 12 Grad / s ...

In 3-D-Problem ist identisch mit Ausnahme der „Veränderung der LOS-Rate“, (und die daraus resultierende Raketendrehgeschwindigkeit) ist selbst ein Vektor, das heißt, es ist nicht nur eine Größe hat, aber eine Richtung (schalte ich die Rakete links , rechts oder nach oben oder unten oder 30 ° über der horizontalen nach rechts, etc ?? ... Stellen Sie sich vor, wie eine Rakete Pilot, in dem Sie „setzen die Flügel“ würde den Lift anzuwenden ...

Radar-Lenkwaffen, die „wissen“ die Rate der Schließung. stellen Sie die Proportionalitätskonstante basierend auf Verschluss (je höher die Schließung desto schneller ist die Rakete zu drehen versucht), so dass die Rakete aggressiver in hohem Verschluss Szenarien drehen, (wenn die Flugzeit niedriger ist), und weniger aggressiv in geringer Schließ (Schwanz jagt), wenn es um Energie sparen muss. Andere Raketen (wie Sidewinder), die die Schließung nicht kennen, verwenden Sie einen konstanten vorgegebenen Proportionalitätswert). FWIW, Vietnam-Ära AIM-9 Sidewinder verwendet, um eine Proportionalitätskonstante von 4.

Andere Tipps

Ich habe diesen Artikel Codeproject, bevor sie verwendet - es einige wirklich nette Animationen hat die Mathematik zu erklären

.

„Die Mathematik der Targeting und Simulieren einer Rakete: Von Calculus zum Quartic Formula“: http://www.codeproject.com/KB/recipes/Missile_Guidance_System.aspx

(auch an der Unterseite dieses Artikels in den Kommentaren versteckt ist ein Verweis auf einig C ++ Code, der erreicht die gleiche Aufgabe von der Unreal wiki)

Hier finden Sie aktuelle OpenSteer . Es hat Code Probleme wie diese zu lösen. Schauen Sie sich 'steerForSeek' oder 'steerForPursuit'.

Haben Sie eine negative Bewertung über die jüngste Änderung des Lagers über Wandel der Zeit betrachtet?

Details als Übung.

Die Vorschläge sind völlig ernst: wenn das Ziel das nicht manövrieren sollte einen nahezu optimalen Schnittpunkt erhalten. Und es sollte konvergieren auch wenn das Ziel aktiv ausweichen.

mehr Details nötig?

Solving in einem zweidimensionalen Raum für eine einfache Notation. Nehmen Sie \vec{m} die Lage der Rakete und Vektor \vec{t} sein, um die Lage des Ziels zu sein. Die aktuelle Position in der Bewegungsrichtung gegenüber der letzten Zeiteinheit: \vec{h} = \bar{\vec{m}_i - \vec{m}_i-1}}. Es sei r der normlized Vektor zwischen der Rakete und dem Ziel sein: \vec{r} = \bar{\vec{t} - \vec{m}}. Das Lager ist b = \vec{r} \dot \vec{h} zu jedem Zeitpunkt tick das Lager zu berechnen und die Änderung davon und Position zu ändern, diese Menge zu minimieren.

Die Mathematik ist Harrier in 3d wegen der Notwendigkeit, die Wirkungsebene bei jedem Schritt zu finden, aber das Verfahren ist das gleiche.

Sie werden die Flugbahn sowohl dem Ziel und der Rakete als Funktion der Zeit zu interpolieren wollen. Dann ist für die Zeiten, in denen die Koordinaten der Objekte innerhalb eines bestimmten akzeptablen Fehler sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top