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)