Как использовать популярный transformations.py library для поворота точки вокруг оси?Как повернуть точку с помощью transformations.py
Я пытаюсь повернуть точку на 90 градусов относительно оси z, но я не получаю ожидаемых результатов, и хотя документы файла содержат несколько примеров создания матриц преобразования, на самом деле это не показывает, как использовать эти матрицы для применения преобразования. Мой код:
from math import pi
import transformations as tf
import numpy as np
alpha, beta, gamma = 0, 0, pi/2.
origin, xaxis, yaxis, zaxis = (0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1)
Rx = tf.rotation_matrix(alpha, xaxis)
Ry = tf.rotation_matrix(beta, yaxis)
Rz = tf.rotation_matrix(gamma, zaxis)
R = tf.concatenate_matrices(Rx, Ry, Rz)
point0 = np.array([[0, 1, 0, 0]])
point1 = R * point0
#point1 = R * point0.T # same result
#point1 = np.multiply(R, point0) # same result
#point1 = np.multiply(R, point0.T) # same result
point1_expected = np.array([[1, 0, 0, 0]])
assert point1.tolist() == point1_expected.tolist() # this fails
Это вычисляет point1 как:
[[ 0.00000000e+00 -1.00000000e+00 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 6.12323400e-17 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
, который не имеет никакого смысла для меня. Умножение матрицы 4x4 на матрицу 4x1 должно приводить к 4x1, а не к 4x4. Что я делаю не так?
Это не кажется, чтобы быть правдой, и просто дает мне другую ошибку, 'ValueError: формы (4,4) и (1 , 4) не выровнены: 4 (dim 1)! = 1 (dim 0) '. Если я делаю 'R.dot (point0.T)', тогда я получаю бессмысленный вектор '[[-1, 6.12, 0, 0]]'. – Cerin
@Cerin: По какой-то причине вы сделали 1x4 массив вместо 4x1. (Вероятно, вы, вероятно, должны использовать одномерный массив для вектора вместо 2-мерного.) Что касается 6.12, вы не смотрите на экспонента. Это 6.12e-17, что составляет 0 до ошибки округления. – user2357112
Вы правы, я пропустил экспонента, и мой знак вращения был назад. Благодарю. – Cerin