尤拉角與旋轉RT矩陣的相互轉換

2021-10-05 03:20:07 字數 1919 閱讀 9499

表示空間剛性姿態的方式有多種:尤拉角,四元素,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矩陣。還有很...