ベクトル間の時計回りの角度の計算: 古典的なアプローチを超えて
2 つのベクトル間の角度を計算する古典的な方法は、ドット積に依存します。内角 (0 ~ 180 度) のみを提供します。望ましい時計回りの角度を直接取得するために、行列式を利用する別のアプローチを検討します。
2D ベクトル
2D 領域では、行列式は、行列式に比例する値を表します。角度の正弦。したがって、次を使用して角度を計算できます。
dot = x1*x2 + y1*y2 det = x1*y2 - y1*x2 angle = atan2(det, dot)
結果の角度は座標系の方向と一致し、時計回りの回転では正の値が得られます。入力ベクトルを入れ替えると、符号が反転します。
3D ベクトル
3D ベクトルの場合、回転軸が未定義のままであり、通常は正の角度を選択します。正規化されたドット積は、適切な尺度を提供します。
dot = x1*x2 + y1*y2 + z1*z2 lenSq1 = x1*x1 + y1*y1 + z1*z1 lenSq2 = x2*x2 + y2*y2 + z2*z2 angle = acos(dot/sqrt(lenSq1 * lenSq2))
3D に埋め込まれた平面
ベクトルが既知の法線ベクトル n を持つ平面内にある場合、次のことができます。この情報を利用して計算を調整します:
dot = x1*x2 + y1*y2 + z1*z2 det = x1*y2*zn + x2*yn*z1 + xn*y1*z2 - z1*y2*xn - z2*yn*x1 - zn*y1*x2 angle = atan2(det, dot)
範囲0 – 360°
一般的な atan2 実装は、[-π, π] ラジアンの範囲の角度を返します。希望の範囲 [0, 2π] ラジアンの角度を取得するには、負の結果に 2π を加算するだけです。あるいは、無条件に atan2(-det, -dot) π を使用します。
以上が2 つのベクトル間の時計回りの角度を計算する方法: 内積を超えて?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。