ミサイルへのターンヘディングを計算する方法は?


14

船から斜めに発射されたミサイルがあり、ミサイルは与えられた回転半径で弧を描いてターゲットに向かって回転します。ミサイルが目標に向かって直進するように、旋回を開始する必要があるときに、アーク上のポイントを決定するにはどうすればよいですか?

編集

ミサイルを発射する前に必要なことは、飛行経路を計算して描画することです。したがって、添付の例では、打ち上げロケットの方向は90度であり、ターゲットはその後ろにあります。両方のミサイルは、打上げ機の方位に対して-45度または+ 45度の相対方位で発射されます。ミサイルは最初、既知の旋回半径でターゲットに向かって旋回します。私は、ターゲットを直接攻撃するために、ターンがミサイルを見出しに向ける地点を計算する必要があります。明らかに、ターゲットが45度または45度に近い場合、ミサイルはターゲットに対してまっすぐ進むだけで、最初の旋回はありません。

ミサイルが発射された後、地図には、飛行経路の指標として、このライン上にミサイルの追跡も表示されます。

私がやっていることは、運用ソフトウェアを模倣するシミュレータの開発です。そのため、ミサイルの発射を許可する前に、計算された飛行経路を描く必要があります。

2つのターゲットを狙った2つのミサイル

この例では、ターゲットはロケットの背後にありますが、事前に計算されたパスが描かれています。


1
ヘディングは事前に計算されていますか、それとも軌跡の間に変化しますか?(ホーミングミサイルのような?)
ジョナサンコネル

1
(x2-x1)^ 2 +(y2-y1)^ 2 = r ^ 2(x1、y1)は現在のミサイルの位置、(x2、y2)はターゲットのときだけではないでしょうか?
共産主義のダック

たぶん、あなたはあなたが望むものを描くべきです。
aaaaaaaaaaaa

3
これは2Dまたは3Dの問題ですか?
スティーブH

ホーミングミサイルのようなものを探しているなら、三角法を使わずにそれを行うことができます。この質問を
BlueRaja-ダニーPflughoeft

回答:


9

私の数学は少し間違っているかもしれないので、私は答えをウィキしました。

継続的なホーミングシナリオを実行する必要があると仮定します。このシナリオでは、速度V1で移動するミサイルP1が常にプレーヤーP2の方を向こうとします。しかし、限られた回転率で。

  1. プレイヤーとミサイル間のベクトルを決定します。

    V2 = P2 - P1
  2. それらを単位ベクトルに変換します。

    V3 = UNIT(V1)
    V4 = UNIT(V2)
  3. ベクトル間の角度を決定します。

    a = ARCCOS(V3 * V4) (* indicating dot product)
  4. それらの間の角度の値を制限します(トリガー関数はおそらくラジアンで動作することを忘れないでください。回転率として0.1を試してください)。

    a = SIGN(a) * MINIMUM(ABS(a), MaximumTurningRate)
  5. 新しい移動ベクトルを作成します。

    V1 = UNIT(V3.x + SIN(a), V4.y + COS(a)) * MissileSpeed

編集:これは、継続的なホーミングシナリオのためのより堅牢な(そしてより簡単な実装である)ため、「開始点」を持ちません。円の開始点を見つける必要はありません。ミサイルが方向を変える速度を制限するだけで、残りは機械の幽霊のために起こります。


1
うーん...メモリが役立つ場合、角度の方向を取得するにはクロス積を行う必要があると思います。ドット積を行うだけで、角度の大きさはわかるが方向はわからない(ドット積はV3 * V4 = V4 * V3になる可能性があるため、向きの違いに注意する方法はないようだ)。そのため、内積を行い、次に外積(Z座標の符号の確認)を行って方向を見つけます。
ChrisE

@ChrisEこの例は2D(5を見る)であるため、元の方向と角度の大きさで十分です。
キーブルブロックス

間の角度の計算は正しいですが、ステップ5であなたが述べた意図が何であるか、またはそれが生成するものかどうかはわかりません。ステップ5は、数学が理解できないため、角度aをv3に追加することを想定しています。
点滴

@dlotsステップ5は、現在の移動ベクトルに新しい「制限された回転速度の角度」を追加することになっています-基本的には、ミサイルの方向を変更します。
ジョナサンディキンソン

SIGNステップ4には何がありますか?
ダニエルカプラン

2

発射の方向をターゲットの方向に変更して方向を変更したいので、ターゲットに向かってまっすぐに進みます(より楽しい問題は、方向転換時にターゲットにヒットすることです!)。

私はあなたがすべての方向に同じ旋回半径で旋回できると仮定しなければなりません(これは実際のミサイルでは見にくい単純化です)。

最も簡単な解決策は、90°の曲げを使用することです。ミサイルは、その軌道がターゲットと直角になるまでファイルします。90°の地点で正確に旋回すると、旋回自体を考慮する必要があるため、正確に旋回半径だけ目標を逃すことになります。解決策は、90°の点に到達する前に正確に「回転半径」メートル(?)を回し始め、次に90°の弧を描いて(推測して)ターゲットにまっすぐ進むことです。

このソリューションは、90°の経路(建物やその他の障害物)が見えない場合など、常に実現可能ではありません。

良い知らせは、このソリューションはあらゆる角度(神話上の90°だけでなく)で機能するということです。トリックは、前の方向転換を開始するために必要なスペースを考慮することです。

どれくらい前?これが、90°のものが最も簡単な解決策である理由です...

発砲経路がθ°の角度を形成するときに視界または最適な目標方位に到達するとし、次の方法で旋回を予測する必要があるとします。

(sec(90° - θ°) + tan(90° - θ°)) * turning_radius

...ここでsecantはコサインの逆数です。証拠は取るに足らないものであり、読者に任されています。

真剣に、式は単純な幾何学的構造から来ています。

ターニングポイントグラフ

黒い線は発射パスであり、細い黒い線は、turning_radiusユニットによってターゲットに向かって移動した同じパスです。ターゲットパスである赤いものについても同じです。

緑のセグメントの長さはTurning_Radiusであるため、次のことがわかります。

ABは90°-θ°のタンジェントです

BCは割線です。

転換点から来る緑色の線は両方とも、長さがTurning_Radiusであり、2つのパスに垂直です。つまり、回転半径が正しいことと、円弧が両方のパスに接していることを意味します(物理的な制約の下で回転する場合のように)。

エラーが発生した場合はお知らせください。

編集:

投稿された図面は、ここに見られるように、固定シューターとターゲットであっても、パスに複数の選択肢があることを示しています。

ここに画像の説明を入力してください

ターゲットが選択されたら、上で言ったことを適切な角度で適用できます。


これは継続的な更新システムではないことに注意してください。ホーミングはより多くのCPU(大量)を必要とするため、これは固定ターゲットまたは「セミダム」ミサイルの実装を希望する場合に適切なアプローチを検討する必要があります。軌跡は、パスを3つのサブパスに分割するtで単純にパラメータ化でき、アークはベジェ曲線で近似できます。
FxIII

1

ミサイルに「ステアリング動作」を実装します。ミサイルには、速度(数値)、位置(ベクトル)、および(現在の)回転があります。ゲームの各更新/各フレームで、ミサイルの回転は少しだけ(ターゲットに向かって)変更されます。その後、ミサイルは現在の回転と現在の速度に従って前方に移動します。

唯一の違いは追加の寸法であるため、明らかに2Dおよび3Dで機能します。

別の可能性は、発射する前にミサイルの経路を計算することです。見上げベジェ曲線スプラインを


ここでスプラインを使用する場合の問題は、ターゲットが移動した場合、コントロールポイントを継続的に更新する必要があることです。ここでの単純なステアリングアルゴは、計算的に安価な場合があります。
-ChrisE

実際、ターゲットへのパスを事前に計算しようとしています。私が働いているのは、いくつかの実際の機器のシミュレーターであり、実際の機器の動作を模倣しようとしています。
トニー

0

ここで間違った問題を解決しているように感じます。現実世界のミサイルは、どこを向くかを心配することはありません。ターゲットを指すまで単純に方向転換します。実際のミサイルはターン率を即座に変更できないため、制御を行う唯一の場所は、コントロールをニュートラルに戻すタイミングです。その計算は、ミサイルの指示された対気速度のみを入力値として受け取り、事前計算されると思います。


2
現実の世界のミサイル、特に最近の武器には慣性誘導システムまたはGPS、あるいはその両方が搭載されているため、探索エリアに移動してターゲットを探し始めるようにプログラムされます。友好的な人が近くにいるなら、悲惨なことになります。このプログラミングにより、ミサイルを友好的なものや陸地や無実の傍観者などの他の障害物を回避する経路で送信できるようになっています。
トニー

0

最も単純なアルゴリズムは、次の2つのルールに従うだけだと思います。

  1. 現在のターゲットが回転直径よりもミサイルに近い場合は、まっすぐ進みます。これにより、ミサイルが実際に到達するのではなく、近くのターゲットを周回することが回避されます。

  2. それ以外の場合は、ターゲットを指すまでターゲットに向かってください。

2Dでターンが終了するポイントを計算するには:

  1. 方向転換を開始する地点で、方向転換円の中心は、方向転換半径の距離で現在の方向に垂直な方向にあります。これらのポイントには2つあることに注意してください。おそらく、ターゲットに最も近いポイントが必要です。その位置を計算し、Pと呼びます。

  2. これで、接線に直角で、2つの既知のポイント-Pと目的地で直角三角形を作成できます。これにより、ピタゴラスで接線からターゲットポイントまでの距離を計算できます。それをDと呼ぶ

  3. 次に、目的地の半径Dの円と回転円の交点計算する必要があります。ミサイルの回転が停止する円上の2つの接点である2つのソリューションが得られます(円の周りの移動方向ごとに1つ)。ミサイルの前にあるポイントを選んでください-それがあなたの答えです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.