參考:
兩個向量間任意旋轉都可以用乙個旋轉軸和乙個旋角來表示,於是我們可以用乙個向量來表示任意旋轉。
理解:兩個向量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 對旋轉向量...