計算向量之間順時針角度的直接方法
處理二維向量時,可以直接使用行列式計算順時針角度和點積。點積提供有關餘弦的信息,而行列式則揭示角度的正弦。使用 atan2 函數,您可以獲得順時針角度,如下所示:
dot = x1*x2 + y1*y2 # Dot product of [x1, y1] and [x2, y2] det = x1*y2 - y1*x2 # Determinant angle = atan2(det, dot) # Clockwise angle
請注意,角度的方向與座標系對齊。對於右手系統(x 向右,y 向下),順時針角度產生正值。反轉輸入的順序會改變角度的符號。
在三維空間中,向量可以沿著任一平面分佈,旋轉軸也是任意的。通常,角度被視為正值,軸的方向為正角。然後,歸一化向量之間的點積可以確定角度:
dot = x1*x2 + y1*y2 + z1*z2 # Dot product of [x1, y1, z1] and [x2, y2, z2] lenSq1 = x1*x1 + y1*y1 + z1*z1 # Squared length of vector 1 lenSq2 = x2*x2 + y2*y2 + z2*z2 # Squared length of vector 2 angle = acos(dot/sqrt(lenSq1 * lenSq2)) # Clockwise angle
如果向量位於已知平面內,則可以透過將平面的法向量合併到行列式中來使用修改後的2D 計算:
dot = x1*x2 + y1*y2 + z1*z2 det = n * (v1 × v2) # Triple product angle = atan2(det, dot)
其中n 是單位長度法向量。
可能需要調整以確保角度落在範圍內所需的範圍(例如,[0, 360°])。透過在負結果上加上 2π 或使用 atan2(-det, -dot) π,可以相應地調整角度。
以上是如何直接計算二維和三維兩個向量之間的順時針角度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!