3D数学基础————EulerAngles类数学原理

本文详细介绍了3D数学中的欧拉角限制,包括别名问题和万向锁解决方案。同时,从矩阵和四元数转换到欧拉角的方法也进行了深入探讨,提供了解决欧拉角限制的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1.欧拉角的限制

//变成"限制集"欧拉角
void canonize();

1.1欧拉角的表达方式不唯一,会有别名问题。

例如:

pitch:135° 可以转换为pitch:45°,heading:180°,bank:180°.

方案:

应该将pitch限制在[-90°,+90°],heading[-180°,+180°],bank[-180°,+180°];

1.2欧拉角会产生万向锁的问题

当pitch = 90°时,绕y轴的旋转和绕z轴的旋转会相同。

方案

规定当欧拉角处于反向锁时将绕z轴(bank)的旋转角度全部赋给y轴(heading)

heading += bank;bank = 0;

2.从矩阵转换到欧拉角

void fromObjectToWorldMatrix(const Matrix4x3&);
void fromWorldToObjectMatrix(const Matrix4x3&);

■(cos⁡h cos⁡b+sin⁡h sin⁡b&-cosh⁡⁡sinb+sin⁡h sin⁡p cos⁡b&sin⁡h cos⁡p@sin⁡b cos⁡p&cos⁡〖b cos⁡p 〗&-sin⁡p@-sin⁡〖h cos⁡〖b+cos⁡〖h sin⁡〖p sin⁡b 〗 〗 〗 〗&sin⁡〖b sin⁡〖h+cos⁡〖h sin⁡〖p cos⁡b 〗 〗 〗 〗&cos⁡〖h cos⁡p 〗 )2.1惯性—物体矩阵推出欧拉角

由惯性—物体欧拉角转换成的惯性—物体矩阵

M1 = \begin{bmatrix} \cos h\cos b+\sin p\sin h\sin b&-\cos h\sin b+\sin h\sin p\cos b &\sin h\cos b \\ \sin b\cos p&\cos b\cos p &-\sin p \\ -\sin h \cos b+\cos h\sin p\sin b& \sin b\sin h+\cos h\sin p\cos b&\cos h\cos p \end{bmatrix}

可得公式

p =\arcsin (-m23)

当cos(p) != 0时(欧拉角不为万向锁时):

h = \arctan (m13/\cos p,m33/\cos p) = \arctan (m13,m33);

b = \arctan (m21/\cos p,m22/\cos p) = \arctan (m21,m22);

当cos(p) == 0时(欧拉角为万向锁时):

欧拉角的限制 可得

b = 0; sin b = 0; sinp  = 1;cosp = 0

得到另一个矩阵:

\begin{bmatrix} \cos h & \sin h \sin p & 0\\ 0& 0&-\sin p \\ -\sin h&\cos h\sin p &0 \end{bmatrix}

h = \arctan(-m31,m11)

2.2物体—惯性矩阵推出欧拉角

M2 = M1的转置矩阵,做法与2.1类似.

3.从四元数转换到欧拉角

void EulerAngles::fromInertialToObjectQuaternion(const Quaternion&q);

3.1惯性—物体四元数推出欧拉角

由四元数转换到矩阵

Q1 = \begin{bmatrix} 1-2y^2-2z^2& 2xy+2wz & 2xz-2wy\\ 2xy-2wz& 1-2x^2-2z^2 &2yz+2wx \\ 2xz+2wy&2yz-2wx &1-2x^2-2y^2 \end{bmatrix}

将Mij中的元素带入

矩阵转换到欧拉角 的式子中

p = \arcsin(-m23)=\arctan(-2(yz+wx))

当cosp!=0时

h = \arctan (m13,m33) = \arctan(xz-wy,1/2-x^2-y^2)

b = \arctan (m21,m22) = \arctan(xy-wz,1/2-x^2-z^2)

当cosp==0时

h = \arctan (-m31,m11) = \arctan(-xz-wy,1/2-y^2-z^2)

b = 0;

3.2物体—惯性四元数推出欧拉角

Q2 = Q1的转置,做法类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值