web-dev-qa-db-ja.com

船舶レーダーの最接近点(CPA)数式

最近、ある船と別の船の間の最接近点(CPA)を見つけるための数式を探していました。レーダーシッププログラムに数式を適用する必要がありますが、正しい計算方法が見つかりません。

手動でプロットする代わりに、正しい数式(または疑似コード)が誰か知っていますか?

2
Syamilsynz

以下に表示される可能性があるが、基本的なアプローチは有効である数学のエラーをすみません。

パラメトリック方程式を使用して、船の座標を表すことができます。

Pxy(t) = (x(t),y(t))

船のx位置が時間の関数として表され、独立してy位置が時間の関数として表されることを意味します。

例えば、

Xa(t) = t; Ya(t) = 2t + 5は、t = 0での座標(0、5)を持つ直線を表します。

Xb(t) = t - 4; Yb(t) = t + 10は、t = 0での座標(-4、10)を持つ直線を表します。

次に、両方の船のパラメトリック方程式を距離の式に代入して、時間= tでの互いの距離を計算します。

D = sqrt((Xa(t) - Xb(t))2 + ((Ya(t) - Yb(t))2)

上記の例を使用する

D = sqrt((t - (t -4))2 + ((2t + 5) - (t + 10))2)

D = sqrt(16 + t2 -10t + 25) = sqrt(t2 - 10t + 41)

次に、方程式の最小値を解きます(t = 5)

距離の式にtの値を挿入すると、2つの船の間の最小距離と時間がわかります。

この方法の優れた点は、位置を関数で表すことができる限り、船が直線で移動する必要がないことです(上記の例のように)。もちろん、パスが複雑になるほど、最小値を解くことが難しくなります。

また、このアプローチは、2Dだけでなく、作業したい次元の数に変換されます。

さらに、誰もがコンピュータサイエンスにとって役に立たないと考える、その微積分クラスの多くの用途の1つを示しています。

船の動きを直線に制限すると、これは比較的簡単に実装できるはずであり、非常に速く実行されます。これを行うためのより迅速で正確な方法はないと思います。

この方法を使用するもう1つの良い点は、実行にかかる時間は確定的であることです。時間をインクリメントして、何が得られるかを確認するという他の提案では、非常に多くのインクリメントで回答が得られる可能性があります。各状況で実行するまでにかかる時間はわかりません。

2
Dunk

両方の船が動いている場合、おそらく次のN分の1分ごとに(現在の船首方位と速度に基づいて)両方の位置を計算し、その後、各時間間隔で2点間のユークリッド距離を計算します

1隻の船が静止している場合は、 ラインからポイントまでの最短距離 を実行できます。

1
Martin Beckett