https://www.gregslabaugh.net/publications/euler.pdf
、
、
分别是x、y,z轴。每一个旋转被应用于一个世界轴,而不是一个身体轴(这说的是个啥),
这里面、
假设我们有一个矩阵我们要从旋转序列中提取旋转角度
、
、
。
Shoemake的代码直接求解
如果非常小甚至是0,那问题就来了,这样
也会变得很小,也许也是0(
不就趋于
),那
不就不好提取了么。
Shoemake根据一个很小的阈值来测试计算的值——如果它低于这个阈值,那么矩阵元素大约减少到以下形式:
在这种情况下,角度、
被一个不同的编码路径提取。这个矩阵提供了一个gimbal lock现象的例子,在这个例子中,第1和第3轴通过第2轴旋转对齐,有效地失去了一个自由度,因为现在
、
的组合作为一个单一参数。Shoemake通过将其强制
为0来处理这种情况-这是可以的,因为gimbal lock允许我们任意地设置一个
和一个
然后推出另一个。这进一步将矩阵简化为以下形式:
如果此乘积表示绕z轴的纯旋转,则其形式必须为:
提取应该是直接的。在实践中,我们甚至不需要计算一个完整的矩阵乘积。从
中间一行读取,我们得到
就是把矩阵乘对应起来
、
最后:
注意啊这里用的是行向量,所以和正常的关系是转置关系