OSG 旋轉矩陣和四元素 尤拉角

2021-07-30 08:06:44 字數 1252 閱讀 6092

osg中需要對節點進行旋轉,是通過matrixtransform節點來進行。

osg在描述旋轉時候一般通過osg::matrix來描述。

比如:osg::vec3d pt(10, 0, 0);

通過乘法可以進行對點的旋轉。

pt = pt * matrix; 

matrix 裡面除了含有旋轉,還包含了縮放,平移

它的含義如下:

1 0 0 0

0 1 0 0

0 0 1 0

10 10 10 0.5

裡面的 1 0 0 表示旋轉矩陣 

0 1 0

0 0 1

10 10  10 表示位移

0.5 表示縮放

四元素osg中提供介面可以直接把矩陣轉換成四元素

對於沒有縮放的矩陣,可以直接通過獲得四元素

osg::quat so = matrix.getrotate();

但是對於有縮放和位移的矩陣,不能直接使用上述方法, osg中提供了分解的方法

osg::quat quat;

osg::quat so;

matrix.decompose(tr, quat, scale, so);

尤拉角osg中並沒有提供轉換成尤拉角的介面,但是可以通過下面的函式來進行轉換

void quattohpr(osg::quat q, double& heading, double& pitch, double& roll)

if (test < -0.4999)

double sqx = q.x() * q.x();

double sqy = q.y() * q.y();

double sqz = q.z() * q.z();

heading = atan2(2.0 * q.z() * q.w() - 2.0 * q.y() * q.x(), 1.0 - 2.0 * sqz - 2.0 * sqx);

pitch = asin(2.0 * test);

roll = atan2(2.0 * q.y() * q.w() - 2.0 * q.z() * q.x(), 1.0 - 2.0 * sqy - 2.0 * sqx);

}尤拉角轉四元素 只需要清楚知道旋轉的順序,和旋轉軸即可,一般是通過下面這種方式來旋轉,即先y軸,再x軸,再z軸

osg::quat ccompresstexturedlg::hprtoquat(double heading, double pitch, double roll)



旋轉矩陣,四元素,尤拉角

旋轉變換 旋轉變換最為直觀的表示方法是 軸 角 繞著某乙個過原點軸,旋轉某一角度。軸可以用乙個單位長度的點 w1,w2,w3 w1,w2,w3 表示 原點到該點的射線即為此軸。使用右手座標系,拇指指向軸方向,四指方向即為旋轉的方向。乙個旋轉變換可以用用尤拉角 四元數或者旋轉矩陣表示。以下討論不同表示...

四元素與旋轉矩陣

如何描述三維空間中剛體的旋轉,是個有趣的問題。具體地說,就是剛體上的任意乙個點p x,y,z 圍繞過原點的軸 i,j,k 旋轉 求旋轉後的點p x y z 旋轉矩陣乘以點p的齊次座標,得到旋轉後的點p 因此旋轉矩陣可以描述旋轉,x y z 1 r xy z1 繞x,y,或z軸旋轉 的矩陣為 r x ...

旋轉矩陣 尤拉角 四元數比較

旋轉矩陣 尤拉角 四元數主要用於 向量的旋轉 座標系之間的轉換 角位移計算 方位的平滑插值計算。旋轉矩陣 尤拉角 四元數比較 不同的方位表示方法適用於不同的情況。下面是我們對合理選擇格式的一些建議 1.尤拉角最容易使用。當需要為世界中的物體指定方位時,尤拉角能大大的簡化人機互動,包括直接的鍵盤輸入方...