python 實現二維向量旋轉

2021-10-23 19:46:38 字數 1352 閱讀 2729

現有一起點在原點 (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的建構函式構...