scipy.spatial.transform.Rotation.from_matrix

Rotation.from_matrix()

从旋转矩阵初始化。

三维旋转可以用3x3的本征正交矩阵来表示。 [1]. 如果输入不是适当正交的,则使用中介绍的方法创建近似 [2].

参数
matrix类阵列,形状(N,3,3)或(3,3)

单个矩阵或一堆矩阵,其中 matrix[i] 是第i个矩阵。

退货
旋转Rotation 实例循环实例

对象,该对象包含由旋转矩阵表示的旋转。

注意事项

此函数以前从_DCM调用过。

1.4.0 新版功能.

参考文献

1

https://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions

2

兰迪斯·马克利,“旋转矩阵中的单位四元数”,“制导、控制和动力学杂志”第一卷。31.2,第440-442页,2008年。

示例

>>> from scipy.spatial.transform import Rotation as R

初始化单个旋转:

>>> r = R.from_matrix([
... [0, -1, 0],
... [1, 0, 0],
... [0, 0, 1]])
>>> r.as_matrix().shape
(3, 3)

初始化单个对象中的多个旋转:

>>> r = R.from_matrix([
... [
...     [0, -1, 0],
...     [1, 0, 0],
...     [0, 0, 1],
... ],
... [
...     [1, 0, 0],
...     [0, 0, -1],
...     [0, 1, 0],
... ]])
>>> r.as_matrix().shape
(2, 3, 3)

如果输入矩阵不是特殊正交(行列式等于+1的正交),则存储特殊正交估计:

>>> a = np.array([
... [0, -0.5, 0],
... [0.5, 0, 0],
... [0, 0, 0.5]])
>>> np.linalg.det(a)
0.12500000000000003
>>> r = R.from_matrix(a)
>>> matrix = r.as_matrix()
>>> matrix
array([[-0.38461538, -0.92307692,  0.        ],
       [ 0.92307692, -0.38461538,  0.        ],
       [ 0.        ,  0.        ,  1.        ]])
>>> np.linalg.det(matrix)
1.0000000000000002

还可以具有包含单次旋转的堆栈:

>>> r = R.from_matrix([[
... [0, -1, 0],
... [1, 0, 0],
... [0, 0, 1]]])
>>> r.as_matrix()
array([[[ 0., -1.,  0.],
        [ 1.,  0.,  0.],
        [ 0.,  0.,  1.]]])
>>> r.as_matrix().shape
(1, 3, 3)