質問

私が取り組んでいるゲームには、ホーミングミサイルが入っています。現時点では、彼らはターゲットの方を向いているだけで、かなり馬鹿げた結果になり、すべてのミサイルがターゲットの周りを追っています。

ターゲットの「ある」場所を狙う、より致命的なミサイルのフレーバーを作成したい。そこにたどり着くまでに、私はそれを行う方法について少し行き詰まって混乱しています。

ターゲットが将来のある時点でどこにあるのかを解決する必要があると推測しています(とにかく推測)が、どれだけ先を見通すことができないかはわかりません。それはミサイルが標的からどれだけ離れているかに基づいている必要がありますが、標的も移動します。

私のミサイルは一定の推力を持ち、弱い旋回能力を備えています。彼らは速くてエキサイティングであるが、牛のように操縦することを望んでいる(つまり、ひどく、そこにいる非HitchHikerファンにとって)。

とにかく、Stack Overflowの解決に役立つ一種の楽しい問題のように思えたので、より良いまたは「もっと楽しい」というアイデアや提案はミサイルはすべて感謝して受け取られます。

次は、それらを避けるAIです...

役に立ちましたか?

解決

提案しているのは、「コマンドガイダンス」と呼ばれるものです。しかし、より簡単でより良い方法があります。

実際のミサイルが一般的に行う方法(すべてが同じではない)は、比例航法と呼ばれるシステムを使用しています。これは、ミサイルが「曲がる」ことを意味します。ミサイルとターゲットの間の見通し線(LOS)が回転しているのと同じ方向に、「比例」回転速度で、 LOSレートに...これは、LOSレートがゼロの場合、衝突コースにあるため、あなたが求めていることを行います。

ミサイルとターゲットの間の線の傾きを1秒ごとに比較するだけでLOS率を計算できます。その勾配が変化していない場合、衝突コースにあります。変化している場合、変化を計算し、比例角速度でミサイルを回します...ミサイルと目標位置を表す任意のメトリックを使用できます。

たとえば、比例定数2を使用し、LOSが2度/秒で右に移動している場合、ミサイルを4度/秒で右に回します。 LOSは左に6度/秒、ミサイルは左に12度/秒...

3D問題では、「LOSレートの変更」(およびミサイルの回転速度の変化)自体がベクトルである、つまり、大きさだけでなく方向(ミサイルを回転させるかどうか)左、右、上下、右30度など?? ...ミサイルのパイロットとして、「翼を設定して」揚力をかける場所を想像してください...

レーダー誘導ミサイル、「知っている」閉鎖率。閉鎖に基づいて比例定数を調整し(閉鎖が高いほど、ミサイルはより速く回転しようとします)、高い閉鎖シナリオではミサイルがより積極的に回転し(飛行時間が短い場合)、低い閉鎖ではより積極的に回転しません(テールチェイス)エネルギーを節約する必要がある場合。 閉鎖を知らない他のミサイル(サイドワインダーなど)は、一定の所定の比例値を使用します)。 FWIW、ベトナム時代のAIM-9サイドワインダーは4の比例定数を使用しました。

他のヒント

以前このCodeProjectの記事を使用したことがあります-数学を説明するための本当に素晴らしいアニメーションがいくつかあります。

"ミサイルのターゲット設定とシミュレーションの数学:微積分から四次公式まで '': http://www.codeproject.com/KB/recipes/Missile_Guidance_System.aspx

(また、その記事の下部にあるコメントに隠されているのは、 C ++コードへの参照です。 Unreal wikiの同じタスク

OpenSteer をご覧ください。このような問題を解決するコードがあります。 「steerForSeek」または「steerForPursuit」を見てください。

時間の経過に伴う方位の最近の変化に関する否定的なフィードバックを検討しましたか?

演習として残された詳細。

提案は完全に深刻です。ターゲットが操作しない場合、これはほぼ最適なインターセプトを取得するはずです。ターゲットが積極的に回避している場合でも収束するはずです。

詳細が必要ですか?

表記を簡単にするために2次元空間で解く。 \ vec {m} をミサイルの位置にし、ベクトル \ vec {t} をターゲットの位置にします。 前の時間単位での移動方向の現在の方向: \ vec {h} = \ bar {\ vec {m} _i-\ vec {m} _i-1}} 。 rをミサイルとターゲットの間の標準化されたベクトルとする: \ vec {r} = \ bar {\ vec {t}-\ vec {m}} 。方位は b = \ vec {r} \ dot \ vec {h} です。各タイムティックで方位とその変化を計算し、その量を最小化するために方位を変更します。

各ステップでアクションプレーンを見つける必要があるため、3Dで計算は難しくなりますが、プロセスは同じです。

時間の関数としてターゲットとミサイルの両方の軌道を補間する必要があります。次に、オブジェクトの座標が許容範囲内にある時間を探します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top