将四元数转换为欧拉角时,通常必须有轴旋转的顺序,例如这种可视化。 http://quaternions.online/
libgdx 是如何工作的?
四元数类具有以下功能
getRoll():
Math.asin(MathUtils.clamp(2f * (w*x - z * y), -1f, 1f)) :
(float)pole * MathUtils.PI * 0.5f;`
getPitch():
Math.asin(MathUtils.clamp(2f * (w*x - z * y), -1f, 1f)) :
(float)pole * MathUtils.PI * 0.5f;`
getYaw():
`
MathUtils.atan2(2f * (y * w + x * z), 1f - 2f * (y * y + x * x)) : 0f;`
结果角度集的顺序在哪里,哪个轴首先旋转,第二个,第三个?
How are these functions related to a quaternion rotation matrix like:
为什么这个旋转矩阵经常被给出为逆/转置(由于正交性而相等)?
轮换顺序
使用角度三元组进行定向有 12 种可能的旋转顺序。
其中六个称为真欧拉角,其余六个称为泰特-布莱恩角。
在这里阅读更多内容 https://en.wikipedia.org/wiki/Euler_angles
Libgdx 使用以下顺序。
- 绕 Y 偏航旋转
- 向 Y 方向倾斜提升
- 围绕获得的方向滚动旋转
旋转矩阵
旋转矩阵、四元数、欧拉角和轴角表示是编码旋转/方向的不同方式。
他们经常在存储空间和计算成本之间进行权衡。
它们可以通过明确定义的方程(您提到的其中之一)自由地相互转换。所以这些转换表达式是相互关联的。
Edit感谢您指出错误。它确实是关于 Y 轴而不是 Z 轴。
我已经从源代码 https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/math/Quaternion.java.
Libgdx 使用坐标系 http://bulletphysics.org/mediawiki-1.5.8/index.php/Coordinate_system子弹物理引擎。在该系统中,XZ 平面被视为水平,Y 平面被视为向上(而不是 Z)。这就是我错误的根源。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)