from_matrix#
- метод класса Вращение.from_matrix(cls, матрица)#
Инициализировать из матрицы вращения.
Вращения в 3-х измерениях могут быть представлены с помощью 3 x 3 ортогональных матриц [1]. Если входные данные не ортогональны, создается приближение путем ортогонализации входной матрицы с использованием метода, описанного в [2], а затем преобразуйте ортогональные матрицы вращения в кватернионы, используя алгоритм, описанный в [3]. Матрицы должны быть правосторонними.
- Параметры:
- матрицаarray_like, форма (N, 3, 3) или (3, 3)
Одна матрица или набор матриц, где
matrix[i]является i-й матрицей.
- Возвращает:
- вращение
Rotationэкземпляр Объект, содержащий вращения, представленные матрицами вращения.
- вращение
Примечания
Эта функция ранее называлась from_dcm.
Добавлено в версии 1.4.0.
Ссылки
[3]F. Landis Markley, «Unit Quaternion from Rotation Matrix», Journal of guidance, control, and dynamics vol. 31.2, pp. 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.single True >>> 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) >>> r.single False >>> len(r) 2
Если входные матрицы не являются специальными ортогональными (ортогональными с определителем, равным +1), то сохраняется специальная ортогональная оценка:
>>> a = np.array([ ... [0, -0.5, 0], ... [0.5, 0, 0], ... [0, 0, 0.5]]) >>> np.linalg.det(a) 0.125 >>> r = R.from_matrix(a) >>> matrix = r.as_matrix() >>> matrix array([[ 0., -1., 0.], [ 1., 0., 0.], [ 0., 0., 1.]]) >>> np.linalg.det(matrix) 1.0
Также возможен стек, содержащий одно вращение:
>>> 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)