Scipy中四元数转矩阵as_matrix函数的实现依据与来源问询
Scipy四元数转旋转矩阵实现的差异与依据
核心差异:四元数的约定不一样
Scipy的as_matrix和维基百科里的常规实现差异,本质是四元数的存储顺序和旋转方向规则不同:
- 多数资料(包括维基百科)默认四元数是
(w, x, y, z)顺序,w是实部,x/y/z是虚部,且采用主动旋转规则——坐标系不动,物体绕轴旋转。 - Scipy的
Rotation类采用(x, y, z, w)顺序(虚部在前,实部在后),还默认是被动旋转规则——物体不动,坐标系绕轴旋转。这两个约定的组合,直接导致旋转矩阵的计算式和常规版本产生差异。
实现的理论依据
Scipy的实现完全基于四元数与旋转矩阵的标准数学映射,只是适配了自身的约定:
- 假设四元数为
q = x*i + y*j + z*k + w(Scipy的存储顺序),旋转后的向量满足v' = q*v*q^{-1},将这个向量变换公式展开为矩阵形式,就是代码里的计算逻辑。 - 被动旋转对应的矩阵与主动旋转矩阵互为转置,这也是两者实现差异的重要来源之一。
未标注参考的可能原因
- 四元数转旋转矩阵的推导是刚体力学、计算机图形学领域的通用常识,属于行业内广泛共识的基础理论,无需额外标注特定来源。
- 该部分是底层Cython实现的核心逻辑,Scipy的代码贡献者默认使用者熟悉四元数与旋转矩阵的基本转换原理,因此没有单独添加参考链接。
- 开源项目中,对于这类无争议的基础数学实现,通常不会重复标注通用参考资料,只有引入非常规创新方法时才会补充标注。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

