給定兩個三維空間向量,求壹個向量逆時針旋轉到另壹個向量的旋轉角度,在0-360範圍內。
(1)由公式得到的兩個向量的夾角。
(2)根據叉積判斷旋轉方向。
飛機上三點:?
p1(x1,y1)?–& gt;頂點,?
p2(x2,y2)?–& gt;頂點,?
p3(x3,y3)?–& gt;起源,
s(p1,p2,P3)=(x 1-x3)*(y2-y3)-(x2-x3)*(y 1-y3)
如果s & gt0表示三個點以逆時針順序連接。如果是S
二維向量叉積
設向量P = (x1,y1),Q = (x2,y2)。
那麽向量叉積定義為:P × Q = x1*y2-x2*y1?妳得到的是壹個標量,也就是平行四邊形的有符號面積。
顯然,它具有P × Q =-(Q × P)的性質?P × ( - Q ) = - ( P × Q)
除特別說明外,以下所有點均視為向量,點的乘積視為向量叉積;
叉積的重要性質:
& gt如果P × Q > 0,那麽P在Q的順時針方向。
& gt如果p × q
& gt如果P × Q = 0,那麽P和Q是* * *線,但可能方向相同,也可能方向相反。
(1)二維向量
正如點積與角度的余弦成正比,行列式與其正弦成正比。所以妳可以這樣計算角度:
dot = x1*x2 + y1*y2?# x 1,y1與[x2,y2]det = x1*y2 - y1*x2之間的點積?# determinantangle = atan2(det,dot)?# atan2(y,x)或atan2(sin,cos)
角度的方向與坐標系的方向相匹配。在左手坐標系中,也就是計算機圖形學中常見的X指右,Y向下,也就是說妳得到的是順時針角度的加號。如果坐標系的方向是數學的y方向,就得到逆時針的角度,就像數學中的約定壹樣。改變輸入的順序會改變符號,所以如果妳對符號不滿意,就交換輸入。
阿坦2比阿坦更穩定。
在數學坐標系中,atan2?正結果表示從X軸逆時針旋轉的角度,負結果表示從X軸順時針旋轉的角度。
(2)三維向量
在3D中,兩個任意放置的向量定義了它們自己的旋轉軸,它們都垂直於這兩個向量。旋轉軸沒有固定的方向,這意味著您不能唯壹地固定旋轉方向。通常的做法是保持角度始終為正,並以適合正角度的方式確定軸的方向。在這種情況下,歸壹化向量的點積足以計算角度。
dot = x 1 * x2+y1 * y2+z 1 * z2 # between[x 1,y 1,z1]和[x2,y2,z2]lens q 1 = x 1 * x 1+y 1 * y 1+z 1 * z 6538
lenSq2 = x2*x2 + y2*y2 + z2*z2
angle = acos(dot/sqrt(lensq 1 * lensq 2))