現有一起點在原點 (0,0) 處的向量 (-5,-8)。選擇乙個基向量 (此基向量可以選任意方向、大小)。要將現有向量旋轉至基向量方向,該怎麼做?
設定基向量為 (0,2)。則:
# 基向量
v1 = np.asarray((0
,2))
v2 = np.asarray((-
5,-8
))
# 計算方向向量
unit_v1 = v1 / np.linalg.norm(v1)
unit_v2 = v2 / np.linalg.norm(v2)
# 根據點積反推夾角
dot_product = np.dot(unit_v1, unit_v2)
angle = np.arccos(dot_product)
旋轉公式是逆時針旋轉夾角對應的角度。但注意,按上面點乘公式計算出的角度 angle總是小於180度的那個。事實上,逆時針方向上這兩個向量的夾角等於 360°−
angl
e360°- angle
360°−a
ngle
。 因此要使用叉乘判斷真正的旋轉角大小:
cross_product = np.cross(unit_v1,unit_v2)
if cross_product.item(
)>0:
angle =
2*pi - angle
mat
rix=
[cos
(θ)−
sin(
θ)si
n(θ)
cos(
θ)]matrix = \begin cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta) \end
matrix
=[co
s(θ)
sin(
θ)−
sin(
θ)co
s(θ)
]
rotate_matrix = np.asarray(
[[cos(angle)
,-sin(angle)],
[sin(angle)
,cos(angle)]]
)
new_v2 = np.dot(v2,rotate_matrix)
二維向量旋轉
基礎的2 d繞原點旋轉 在2 d的迪卡爾座標系中,乙個位置向量的旋轉公式可以由三角函式的幾何意義推出。比如上圖所示是位置向量r逆時針旋轉角度b前後的情況。在左圖中,我們有關係 x0 r cosa y0 r sina cosa x0 r sina y0 r 在右圖中,我們有關係 x1 r cos a ...
二維向量旋轉公式
原文 1.基礎的2 d繞原點旋轉 在2 d的迪卡爾座標系中,乙個位置向量的旋轉公式可以由三角函式的幾何意義推出。比如上圖所示是位置向量r逆時針旋轉角度b前後的情況。在左圖中,我們有關係 x0 r cosa cosa x0 r y0 r sina sina y0 r 在右圖中,我們有關係 x1 r c...
用vector實現二維向量
如果乙個向量的每乙個元素是乙個向量,則稱為二維向量,例如 cpp view plain copy vectorint vv 3,vector int 4 這裡,兩個 間的空格是不可少的 將構造乙個二維向量vv,它含有三個元素,每個元素含有4個int型元素的向量。編譯器兩次呼叫vector的建構函式構...