日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

欧拉角和旋转矩阵相互转换

發(fā)布時(shí)間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 欧拉角和旋转矩阵相互转换 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1.參考資料?

2.變換矩陣/F/H的svd分解或者旋轉(zhuǎn)矩陣、平移矩陣求解

3. 歐拉角和旋轉(zhuǎn)矩陣可同樣表示剛體在三維空間的旋轉(zhuǎn),下面分享這兩者互相轉(zhuǎn)換的方法和核心代碼


1.參考資料?

2.變換矩陣/F/H的svd分解或者旋轉(zhuǎn)矩陣、平移矩陣求解

  • 歐拉角轉(zhuǎn)旋轉(zhuǎn)矩陣?
    歐拉角通過將剛體繞過原點(diǎn)的軸(i,j,k)旋轉(zhuǎn)θ,分解成三步,如下圖(藍(lán)色是起始坐標(biāo)系,而紅色的是旋轉(zhuǎn)之后的坐標(biāo)系) ,12種方法的其中一種分解示意圖!
    ?
    如果將每一個(gè)角度用旋轉(zhuǎn)矩陣表示如下:?
    ?
    所以,容易得到,歐拉角轉(zhuǎn)旋轉(zhuǎn)矩陣如下:?

  • 旋轉(zhuǎn)矩陣轉(zhuǎn)歐拉角?
    將旋轉(zhuǎn)矩陣表示如下:?
  • ?
    則可以如下表示歐拉角:?

3. 歐拉角和旋轉(zhuǎn)矩陣可同樣表示剛體在三維空間的旋轉(zhuǎn),下面分享這兩者互相轉(zhuǎn)換的方法和核心代碼

  • 歐拉角轉(zhuǎn)旋轉(zhuǎn)矩陣
/**
歐拉角計(jì)算對(duì)應(yīng)的旋轉(zhuǎn)矩陣
**/
Mat eulerAnglesToRotationMatrix(Vec3f &theta)
{// 計(jì)算旋轉(zhuǎn)矩陣的X分量Mat R_x = (Mat_<double>(3,3) <<1, ? ? ? 0, ? ? ? ? ? ? ?0,0, ? ? ? cos(theta[0]), ? -sin(theta[0]),0, ? ? ? sin(theta[0]), ? cos(theta[0]));// 計(jì)算旋轉(zhuǎn)矩陣的Y分量Mat R_y = (Mat_<double>(3,3) <<cos(theta[1]), ? ?0, ? ? ?sin(theta[1]),0, ? ? ? ? ? ? ? 1, ? ? ?0,-sin(theta[1]), ? 0, ? ? ?cos(theta[1]));// 計(jì)算旋轉(zhuǎn)矩陣的Z分量Mat R_z = (Mat_<double>(3,3) <<cos(theta[2]), ? ?-sin(theta[2]), ? ? ?0,sin(theta[2]), ? ?cos(theta[2]), ? ? ? 0,0, ? ? ? ? ? ? ? 0, ? ? ? ? ? ? ? ? ?1);// 合并?Mat R = R_z * R_y * R_x;return R;
}
  • 旋轉(zhuǎn)矩陣轉(zhuǎn)歐拉角
/*** 功能:  檢查是否是旋轉(zhuǎn)矩陣**/
bool isRotationMatrix(Mat &R)
{Mat Rt;transpose(R, Rt);Mat shouldBeIdentity = Rt * R;Mat I = Mat::eye(3,3, shouldBeIdentity.type());return ?norm(I, shouldBeIdentity) < 1e-6; ? ?
}/*** 功能: 通過給定的旋轉(zhuǎn)矩陣計(jì)算對(duì)應(yīng)的歐拉角**/
Vec3f rotationMatrixToEulerAngles(Mat &R)
{assert(isRotationMatrix(R));float sy = sqrt(R.at<double>(0,0) * R.at<double>(0,0) + ?R.at<double>(1,0) * R.at<double>(1,0) );bool singular = sy < 1e-6; // Iffloat x, y, z;if (!singular) {x = atan2(R.at<double>(2,1) , R.at<double>(2,2));y = atan2(-R.at<double>(2,0), sy);z = atan2(R.at<double>(1,0), R.at<double>(0,0));} else {x = atan2(-R.at<double>(1,2), R.at<double>(1,1));y = atan2(-R.at<double>(2,0), sy);z = 0;}return Vec3f(x, y, z); ??
}

程序運(yùn)行結(jié)果展示:

參考?
1.?歐拉角詳解

2. 歐拉角

暫做記錄,后續(xù)補(bǔ)充

總結(jié)

以上是生活随笔為你收集整理的欧拉角和旋转矩阵相互转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。