如何使用流行的transformations.py库将点绕轴旋转?
我试图在z轴上旋转90度,但我没有得到预期的结果,虽然文件的文档中有几个创建转换矩阵的例子,但实际上并没有说明如何使用这些矩阵来应用转换。我的代码是:
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。我做错了什么?
发布于 2016-04-20 17:47:52
transformations.py使用的是np.array对象,而不是np.matrix,即使在whatever_matrix函数中也是如此。(这是件好事,因为np.matrix很可怕。)您需要使用dot进行矩阵乘法:
point1 = R.dot(point0)另外,由于某种原因,您已经将point0变成了行向量。它要么是列向量,要么是普通的一维向量:
point0 = np.array([0, 1, 0, 0])https://stackoverflow.com/questions/36751217
复制相似问题