欧拉到矩阵和矩阵到欧拉的转换 [英] Conversion euler to matrix and matrix to euler
问题描述
我正在尝试使用 .NET/C# 将根据欧拉角描述的 3D 旋转转换为矩阵,然后返回.我的约定是:
I'm trying to convert a 3D rotation described in term of euler angles into a matrix and then back, using .NET/C#. My conventions are:
- 左手系统(x 右,y 上,z 向前)
- 旋转顺序:绕y,绕x俯仰,绕z倾斜
- 使用左手规则(拇指指向+无穷大)为正旋转
我的试用期是:
欧拉转矩阵(为了简化,我删除了 x,y,z 平移部分)
Euler to matrix (I've removed the x,y,z translation part for simplification)
Matrix3D matrix = new Matrix3D() {
M11 = cosH * cosB - sinH * sinP * sinB,
M12 = - sinB * cosP,
M13 = sinH * cosB + cosH * sinP * sinB,
M21 = cosH * sinB + sinH * sinP * cosB,
M22 = cosB * cosP,
M23 = sinB * sinH - cosH * sinP * cosB,
M31 = - sinH * cosP,
M32 = - sinP,
M33 = cosH * cosP,
};
矩阵到欧拉
const double RD_TO_DEG = 180 / Math.PI;
double h, p, b; // angles in degrees
// extract pitch
double sinP = -matrix.M23;
if (sinP >= 1) {
p = 90; } // pole
else if (sinP <= -1) {
p = -90; } // pole
else {
p = Math.Asin(sinP) * RD_TO_DEG; }
// extract heading and bank
if (sinP < -0.9999 || sinP > 0.9999) { // account for small angle errors
h = Math.Atan2(-matrix.M31, matrix.M11) * RD_TO_DEG;
b = 0; }
else {
h = Math.Atan2(matrix.M13, matrix.M33) * RD_TO_DEG;
b = Math.Atan2(matrix.M21, matrix.M22) * RD_TO_DEG; }
一定是错的.如果我取 3 个角度,将它们转换为矩阵并将矩阵转换回角度,结果与初始值不同.
It must be wrong. If I take 3 angles, convert them into a matrix and convert the matrix back into angles, the result if different than the intial values.
我浏览了几个具有不同公式的站点,从 euclideanspace.com 开始,但我现在完全迷失了,找不到正确的计算.我很感激一点帮助.机上有数学家吗?
I have browsed several sites with different formulas, starting with euclideanspace.com, but I'm now completely lost, and can't find the right computations. I' appreciate a little help. Is there a mathematician onboard?
推荐答案
首先,应该:
sinP = -matrix.M32
完整的解决方案如下
我的推导:
Rx(P)=| 1 0 0 |
| 0 cos P -sin P |
| 0 sin P cos P |
Ry(H)=| cos H 0 sin H |
| 0 1 0 |
| -sin H 0 cos H |
Rz(B)=| cos B -sin B 0 |
| sin B cos B 0 |
| 0 0 1 |
乘以您的订单:
R = Ry(H)*Rx(P)*Rz(B)
= | cos H*cos B+sin H*sin P*sin B cos B*sin H*sin P-sin B*cos H cos P*sin H |
| cos P*sin B cos B*cos P -sin P |
| sin B*cos H*sin P-sin H*cos B sin H*sin B+cos B*cos H*sin P cos P*cos H |
给出反向推导:
tan B = M12/M22
tan B = M12/M22
sin P = -M32
sin P = -M32
棕褐色 H = M31/M33
tan H = M31/M33
这篇关于欧拉到矩阵和矩阵到欧拉的转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!