移動中の航空機シミュレーションから地上のある地点までの方位角と仰角を計算する方法を見つけようとしています。
車両の位置ベクトルPと、その向きの四元数vehQ があります。目標位置Tがあり、 TからPを引いて差分ベクトルdPTを作成しました。
ターゲットに対する z/el 角度を計算するにはどうすればよいですか? ご想像のとおり、私は 3D 数学にあまり詳しくないので、役立つ説明があればすばらしいでしょう。
ありがとう
移動中の航空機シミュレーションから地上のある地点までの方位角と仰角を計算する方法を見つけようとしています。
車両の位置ベクトルPと、その向きの四元数vehQ があります。目標位置Tがあり、 TからPを引いて差分ベクトルdPTを作成しました。
ターゲットに対する z/el 角度を計算するにはどうすればよいですか? ご想像のとおり、私は 3D 数学にあまり詳しくないので、役立つ説明があればすばらしいでしょう。
ありがとう
dPT
まず、車両からターゲットまでの相対位置ベクトルを見つけます。
worldspace target vector dPT = T - P
車両の位置P
とターゲットの位置T
はワールド座標であるため、結果のベクトルdPT
もワールド座標で表されます。dPT
そのため、ワールド座標から車両座標に回転するには、車両の向きのクォータニオンを使用する必要があります。これを行う正しい方法は、クォータニオンを生成したものによって使用される規則によって異なりますが、数学は次のいずれかになる可能性があります。
vehicle target vector U = vector_part( vehQ * quaternion(0,dPT) * conjugate(vehQ) )
or
U = vector_part( conjugate(vehQ) * quaternion(0,dPT) * vehQ )
四元数の規則に関する情報を提供していないため、これらのどれがアプリケーションに適しているかを知る方法がありません. ただし、クォータニオン ソースが、そのクォータニオンを使用してベクトルを回転させるための関数またはメソッドも提供している可能性が高くなります。したがって、実際に行うべきことは、これらの関数を見つけて、ドキュメントを読み、自分で作成する前に使用してみることです。
車両座標でターゲット ベクトルを取得したら、標準的な式を使用して方位角と仰角を見つけることができます。これは座標規則によって異なりますが、例として、座標規則が Z 軸を「上」方向とする右手系の場合:
azimuth = atan2(U.y, U.x)
elevation = atan2(U.z, sqrt(U.x^2 + U.y^2))
-PI/2
これにより、 から までの範囲のラジアンの仰角と からまで+PI/2
の範囲のラジアンの方位角が計算され-PI
、+PI
+x 軸に沿って 0 になり、反時計回りに増加します (仰角が垂直でない限り...)。