scipy.spatial.transform.Rotation.
from_matrix#
- classmethod Rotation.from_matrix(cls, matrix)#
从旋转矩阵初始化。
三维旋转可以用 3 x 3 正交矩阵表示 [1]。如果输入不是正交的,则使用 [2] 中描述的方法创建近似值。
- 参数:
- matrixarray_like, 形状 (N, 3, 3) 或 (3, 3)
单个矩阵或矩阵堆栈,其中
matrix[i]
是第 i 个矩阵。
- 返回:
- rotation
Rotation
实例 包含旋转矩阵表示的旋转的对象。
- rotation
备注
此函数以前称为 from_dcm。
在版本 1.4.0 中添加。
参考文献
[2]F. Landis Markley,“从旋转矩阵获得单位四元数”,《制导、控制和动力学杂志》第 31 卷第 2 期,第 440-442 页,2008 年。
示例
>>> from scipy.spatial.transform import Rotation as R >>> import numpy as np
初始化单个旋转
>>> 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)