首頁 >後端開發 >C++ >如何直接計算二維和三維兩個向量之間的順時針角度?

如何直接計算二維和三維兩個向量之間的順時針角度?

DDD
DDD原創
2024-12-07 21:33:15364瀏覽

How can you directly compute the clockwise angle between two vectors in both two and three dimensions?

計算向量之間順時針角度的直接方法

處理二維向量時,可以直接使用行列式計算順時針角度和點積。點積提供有關餘弦的信息,而行列式則揭示角度的正弦。使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn