最近、ある船と別の船の間の最接近点(CPA)を見つけるための数式を探していました。レーダーシッププログラムに数式を適用する必要がありますが、正しい計算方法が見つかりません。
手動でプロットする代わりに、正しい数式(または疑似コード)が誰か知っていますか?
以下に表示される可能性があるが、基本的なアプローチは有効である数学のエラーをすみません。
パラメトリック方程式を使用して、船の座標を表すことができます。
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つの良い点は、実行にかかる時間は確定的であることです。時間をインクリメントして、何が得られるかを確認するという他の提案では、非常に多くのインクリメントで回答が得られる可能性があります。各状況で実行するまでにかかる時間はわかりません。
両方の船が動いている場合、おそらく次のN分の1分ごとに(現在の船首方位と速度に基づいて)両方の位置を計算し、その後、各時間間隔で2点間のユークリッド距離を計算します
1隻の船が静止している場合は、 ラインからポイントまでの最短距離 を実行できます。