根據旋轉前後的兩向量值求旋轉矩陣 python

2021-10-14 08:23:28 字數 1301 閱讀 2371

參考:

兩個向量間任意旋轉都可以用乙個旋轉軸和乙個旋角來表示,於是我們可以用乙個向量來表示任意旋轉。

理解:兩個向量pq叉乘得到乙個垂直於兩向量的向量n,於是,繞著n旋轉乙個標量角θ。即可讓向量p變到向量q。那麼n和θ就可以描述任意兩向量的旋轉,將它們組成向量:θn,即為旋轉向量。

除了旋轉向量可以表示旋轉之外,旋轉矩陣也可以表示旋轉。它們之間的轉換可由羅德里格斯公式實現:

其中的r為本文的n。i為單位向量。

# **是在blender環境中跑的,只需將vector和matrix轉換到numpy版本即可在普通python環境中跑

// t_location 是目標向量

t_location = vector((

1.0,0,

.0))

t_location_norm = t_location.copy(

) t_location_norm.normalize(

) // originvector是原始向量

originvector = vector((.0,

.0,1.0))

print(t_location_norm)

// @是向量點乘

sita = math.acos(t_location_norm@originvector)

n_vector = t_location_norm.cross(originvector)

n_vector.normalize(

)

n_vector_invert = matrix((

[0,-n_vector[2],n_vector[1]],

[n_vector[2],0,

-n_vector[0]],

[-n_vector[1],n_vector[0],

0] ))

print(sita)

print(n_vector_invert)

i = matrix((

[1,0

,0],

[0,1

,0],

[0,0

,1]))

// 核心公式:見上圖

r_w2c = i + math.sin(sita)*n_vector_invert + n_vector_invert@(n_vector_invert)*(1-math.cos(sita))

根據旋轉前後的向量求旋轉矩陣

在cloundcompare開源裡有矩陣的對應介面,親測可用,非常準確,把 貼下面供開發者使用。其中的dot函式是三維向量的點積函式 附內部實現inline type dot const vector3tpl v const static ccglmatrixtplfromtorotation co...

計算兩個向量之間的旋轉矩陣

為了更好地推導,我們需要加入三個軸對齊的單位向量i,j,k。i,j,k滿足以下特點 i jxk j kxi k ixj kxj i ixk j jxi k ixi jxj kxk 0 0是指0向量 由此可知,i,j,k是三個相互垂直的向量。它們剛好可以構成乙個座標系。這三個向量的特例就是i 1,0,...

旋轉向量 和 旋轉矩陣的相互轉換的幾種方法

最近在做旋轉向量轉旋轉矩陣的,嘗試了幾種方法,現在總結一下,方便以後使用,下面幾種方法求出來的旋轉矩陣都是一樣的,但是在使用之前需要對旋轉向量進行單位化。給定旋轉角度和旋轉向量 pi 3.1415926 qq 1 pi 6 p1 0.8 0.6 0.5 p2 1 2 3 pp p2 p1 對旋轉向量...