直接計算向量之間的順時針角度
傳統上,計算向量之間的角度涉及使用點積,這會產生向量之間的內角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 中,旋轉角度由垂直於所涉及的兩個向量的軸定義。一種約定將正角度分配給將軸與正角度對齊的旋轉。使用此約定:
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_:
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 必須有單位長度。
三重積形式
行列式也可以表示為三元組產品:
det = n · (v1 × v2)
這個公式提供了另一種視角,叉積與角度的正弦成正比,並且垂直於平面,有效地與_n_ 對齊。然後,點積測量具有正確符號的結果向量的長度。
範圍0° – 360°
大多數atan2 實現返回角度範圍為[-π, π] 弧度或[-180° , 180°] 度。對於正角度 [0°、360°],將 2π 加到任何負結果。或者,atan2(-det, -dot) π 可以無條件地用於正角度。
以上是如何直接計算兩個向量之間的順時針角度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!