14

私が取り組んでいるゲームには、ホーミング ミサイルが含まれています。現時点では、彼らはターゲットの方を向いているだけで、すべてのミサイルがターゲットの周りを追うという、かなりばかげた結果を生み出しています。

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

将来のある時点でターゲットがどこにあるのかを突き止める必要があると思いますが(とにかく推測です)、どれだけ先を見ればよいのか頭に浮かびません。ミサイルがターゲットからどれだけ離れているかに基づいている必要がありますが、ターゲットも動いています。

私のミサイルは一定の推力を持っていますが、旋回能力が弱いです。彼らが速くてエキサイティングなものになることを願っていますが、牛のように操縦します(つまり、ヒッチハイカーのファンではない人にとってはひどいことです)。

とにかく、スタック オーバーフローが私を解決するのに役立つ一種の楽しい問題のように思えたので、より良い、または「より楽しい」ミサイルに関するアイデアや提案はすべて感謝して受け取ります。

次はそれらをかわすためのAIです...

4

5 に答える 5

21

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

実際のミサイルが一般的に行う方法 (すべてが同じというわけではありません) は、比例航法と呼ばれるシステムを使用しています。これは、ミサイルとターゲットの間の見通し線 (LOS) が回転しているのと同じ方向にミサイルが「回転」することを意味し、回転率は LOS 率に「比例」します... LOS レートがゼロの場合、衝突コース上にあることを確認してください。

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

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

3 次元の問題は、「LOS レートの変化」(およびその結果のミサイルの回転率) 自体がベクトルである点を除いて同じです。つまり、大きさだけでなく、方向 (ミサイルを左、右または上または下、または水平から右に 30 度上など??... 想像してみてください。ミサイル パイロットとして、揚力を適用するために「翼をセット」する場所を想像してみてください...

接近速度を「知っている」レーダー誘導ミサイル。クロージャーに基づいて比例定数を調整します (クロージャーが高いほど、ミサイルはより速く回転しようとします)。これにより、ミサイルは、高いクロージャーのシナリオ (飛行時間が短い場合) でより積極的に回転し、低いクロージャーではあまり積極的に回転しなくなります。 (尻尾を追いかける)エネルギーを節約する必要があるとき。他のミサイル (Sidewinder など) は、閉鎖を認識しないため、一定の事前定義された比例値を使用します)。FWIW、ベトナム時代の AIM-9 サイドワインダーは比例定数 4 を使用していました。

于 2009-07-29T19:09:41.767 に答える
15

以前、この CodeProject の記事を使用したことがあります。この記事には、数学を説明するための非常に優れたアニメーションが含まれています。

「ミサイルの照準とシミュレーションの数学: 微積分から四次公式まで」: http://www.codeproject.com/KB/recipes/Missile_Guidance_System.aspx

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

于 2009-07-29T19:09:10.503 に答える
5

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

于 2009-07-29T19:12:35.410 に答える
1

時間の変化に伴う方位の最近の変化について否定的なフィードバックを検討しましたか?

詳細は演習として残しました。

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

詳細が必要ですか?

表記を容易にするために 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 では計算が難しくなりますが、プロセスは同じです。

于 2009-07-29T19:10:26.803 に答える
0

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

于 2009-07-29T19:09:31.143 に答える