表示空間剛性姿態的方式有多種:尤拉角,四元素,rt矩陣,這三種主流方式之間可以相互轉化。
尤拉角表示法只有三個變數,簡潔。這也是我為什麼在工程配置檔案中選擇尤拉角。
我自己寫的**,親測可用。
// transform.cpp : 定義控制台應用程式的入口點。
//#include
"stdafx.h"
#include
#include
#include
using
namespace std;
//opencv相關
#include
#include
#include
using
namespace cv;
#define pi 3.141592653
/**尤拉角(弧度制)計算對應的旋轉矩陣
@theta: 三個元素分別代表x y z旋轉分量
@translation: 三個元素分別代表x y z平移分量
**/mat eulertranslationtortmatrix
(const vec3f &theta,
const vec3f &translation)
// printf("\n");
//}return r_t;
}/*** 功能: 檢查是否是旋轉矩陣**/
bool
isrotationmatrix
(mat &r)
/*** 功能: 通過給定的旋轉矩陣計算對應的尤拉角**/
vec3f rotationmatrixtoeulerangles
(mat &r)
else
return
vec3f
(x, y, z);}
vec3f transformpointbyrtmatrix
(const cv::mat& rtmatrix,
const vec3f& inputpoint)
if(rtmatrix.rows !=
4|| rtmatrix.cols !=
4|| rtmatrix.
channels()
!=1|| rtmatrix.
type()
!= cv_64fc1)
double point=
;//最後乙個1是湊成齊次矩陣
cv::mat input(4
,1, cv_64fc1, point)
; cv::mat result = rtmatrix * input;
//返回的是4x1的矩陣
return
vec3f
(result.at<
double
>(0
,0),
result.at<
double
>(1
,0),
result.at<
double
>(2
,0))
;}intmain()
printf
("\n");
}printf
("**************************************\n");
vec3f inputpoint(1
,0,1
);vec3f resultpt =
transformpointbyrtmatrix
(rotatem, inputpoint)
;printf
("***** %f, %f, %f\n"
, resultpt[0]
, resultpt[1]
, resultpt[2]
);getchar()
;return0;
}
尤拉角和旋轉矩陣相互轉換
尤拉角和旋轉矩陣可同樣表示剛體在三維空間的旋轉,下面分享這兩者互相轉換的方法和核心 功能 1.通過給定的尤拉角計算對應的旋轉矩陣 日期 2017 10 12 mat euleranglestorotationmatrix vec3f theta 功能 1.檢查是否是旋轉矩陣 日期 2017 10 1...
尤拉角和旋轉矩陣相互轉換
目錄 1.參考資料 2.變換矩陣 f h的svd分解或者旋轉矩陣 平移矩陣求解 3.尤拉角和旋轉矩陣可同樣表示剛體在三維空間的旋轉,下面分享這兩者互相轉換的方法和核心 尤拉角計算對應的旋轉矩陣 mat euleranglestorotationmatrix vec3f theta 功能 檢查是否是旋...
Dlib姿態估計 旋轉矩陣與尤拉角互轉
在這篇文章中,我將分享將乙個3 3旋轉矩陣轉換成尤拉角的 反之亦然。3d旋轉矩陣可以讓你的頭旋轉。我知道這是乙個壞的雙關語,但真相有時可能是非常小的!乙個旋轉矩陣有三個自由度,數學家已經行使了他們的創造自由,以每個想象的方式來表示3d旋轉 或使用三個數字 或使用四個數字 或使用乙個3 3矩陣。還有很...