時計回りの角度を直接計算する
2 つのベクトル間の時計回りの角度の計算は、多くの場合、内角 (0 -180度)。ただし、直接的な方法を好む場合は、以下の手順を考慮してください。2D ケース
内積が角度の余弦を測定するのと同じように、行列式は角度の正弦を与えます。時計回りの角度は次のように計算できます。dot = x1*x2 + y1*y2 # Dot product between [x1, y1] and [x2, y2] det = x1*y2 - y1*x2 # Determinant angle = atan2(det, dot) # atan2(y, x) or atan2(sin, cos)角度の方向は座標系と一致し、正の符号は時計回りの角度を示します。入力を交換すると方向が変わり、したがって符号も変わります。
3D の場合
3D ベクトルの場合、2 つのベクトルは両方に垂直な回転軸を定義します。この軸には固定された向きがないため、回転角度の方向を一意に決定することはできません。一般的な規則には、正の角度が生じるように軸を向けることが含まれます。このシナリオでは、正規化されたベクトルのドット積で十分です。dot = x1*x2 + y1*y2 + z1*z2 # Between [x1, y1, z1] and [x2, y2, z2] lenSq1 = x1*x1 + y1*y1 + z1*z1 lenSq2 = x2*x2 + y2*y2 + z2*z2 angle = acos(dot/sqrt(lenSq1 * lenSq2))
3D の平面
ベクトルが既知の法線ベクトルを持つ平面内にある場合n、それらの回転軸は n に沿ってあります。 n を組み込みながら 2D 計算を適応させると、時計回りの角度が得られます。
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)
n がこの計算に対して正規化されていることを確認してください。
0-360度Range
多くの atan2 実装は、[-180°, 180°] の範囲の角度を返します。 [0°、360°] の範囲で正の角度を取得するには、負の結果に 2π を加算します。以上が2 つのベクトル間の時計回りの角度を直接計算するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。