三維座標的旋轉有以下幾種常見的表示形式:旋轉向量,旋轉矩陣,尤拉角,四元數,下面對這四種表示形式及其之間的轉換進行介紹
旋轉向量
通常為3x1的列向量,向量方向即為旋轉軸,向量的模表示繞軸逆時針旋轉的角度,如旋轉向量v=[a,b,c],那麼旋轉角度theta=sqrt(a2+b2+c2),旋轉軸z=[a/theta, b/theta, c/theta]
旋轉矩陣
旋轉矩陣用3x3的矩陣表示,旋轉矩陣是正交矩陣,且行列式是單位1
det(r)=1
旋轉向量與旋轉矩陣可以通過羅德里格斯(rodrigues)變換進行轉換。opencv實現rodrigues變換的函式是:
int cvrodrigues2( const cvmat* src, cvmat* dst, cvmat* jacobian=0 );
生成旋轉矩陣的一種簡單方式是把它作為三個基本旋轉的序列復合,如下面要介紹的尤拉角的復合。
尤拉角尤拉角度的基本思想是將旋轉分解為繞三個互相垂直軸的三個旋轉組成的序列。使用尤拉角,就要指明座標系系統以及旋轉順序。最常用的約定,即所謂「roll-pitch-yaw」系統。偏航角——yaw,俯仰角——pitch,翻滾角——rool
下面討論尤拉角與旋轉矩陣之間的轉換,繞x,y,或z軸旋轉θ的矩陣為:
要計算最終的旋轉,只需按一定的順序將rx(θ),ry(θ),rz(θ)做矩陣乘法,所以順序不同,最終的旋轉矩陣結果也不同。如果規定了座標系以及旋轉順序,那麼旋轉矩陣是惟一的。
尤拉角表示的旋轉會造成萬向節鎖(gimbal lock)的現象。所謂萬向節鎖簡單的說是指(經過繞某個軸的旋轉後)物體的兩個旋轉軸指向同乙個方向,從而失去一維自由度,接下來無論如何也旋轉不出某種狀態。由於萬向節鎖的存在,尤拉旋轉無法實現球面平滑插值。
四元數乙個四元數可以表示為q = w + xi + yj + zk,i、j、k是一種特殊的虛數單位(模擬虛數表示中的i,j),並有以下運算規則:i0=j0=k0=1,i2=j2=k2=-1, |q|2=w2+x2+y2+z2=1,四元數的其他性質不在一一敘述。
四元數指明了旋轉的角度和旋轉軸,如旋轉軸的方向余弦為(cosβx,cosβy,cosβz),旋轉角為α,則對應的四元數q=[q0,q1,q2,q3],其中
四元數與旋轉矩陣之間的轉換關係(注意利用模為1的性質有一下兩種表示方法)
或
,旋轉矩陣轉換為四元數:
mij表示旋轉矩陣中第i行k列的元素
四元數轉換為尤拉角:
首先定義
roll –
: rotation about the x-axis
pitch –
: rotation about the y-axis
yaw –
: rotation about the z-axis
則對應的轉換為
如果已知尤拉角求四元數,可以先將尤拉角轉化為旋轉矩陣,再由旋轉矩陣求四元數
三維座標 偏轉 天津三維掃瞄
三維掃瞄的概念及儀器種類 三維掃瞄是指集光 機 電和計算機技術於一體的高新技術,主要用於對物體空間外形和結構及色彩進行掃瞄,以獲得物體表面的空間座標。它的重要意義在於能夠將實物的立體資訊轉換為計算機能直接處理的數碼訊號,為實物數位化提供了相當方便快捷的手段。三維掃瞄技術能實現非接觸測量,且具有速度快...
python三維座標 python中三維輪廓的座標
感謝在這個 上獲得的知識。我能寫乙個簡單的指令碼,列印出等高線圖的座標 x和y 在 下面是乙個例子 from numpy import from pylab import generate a set of random points npts 500 phi random npts 2 pi th...
python實現三維座標旋轉計算
計算空間三維座標系變換一般都是利用旋轉矩陣或者尤拉公式。python有個scipy庫可以直接用於計算空間三維座標變換。pip install scipyaxis是旋轉軸,radian旋轉角度 弧度 rot matrix linalg.expm np.cross np.eye 3 axis linal...