首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用transformations.py旋转点

如何使用transformations.py旋转点
EN

Stack Overflow用户
提问于 2016-04-20 17:36:23
回答 1查看 1.4K关注 0票数 3

如何使用流行的transformations.py库将点绕轴旋转?

我试图在z轴上旋转90度,但我没有得到预期的结果,虽然文件的文档中有几个创建转换矩阵的例子,但实际上并没有说明如何使用这些矩阵来应用转换。我的代码是:

代码语言:javascript
复制
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计算为:

代码语言:javascript
复制
[[  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。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-20 17:47:52

transformations.py使用的是np.array对象,而不是np.matrix,即使在whatever_matrix函数中也是如此。(这是件好事,因为np.matrix很可怕。)您需要使用dot进行矩阵乘法:

代码语言:javascript
复制
point1 = R.dot(point0)

另外,由于某种原因,您已经将point0变成了行向量。它要么是列向量,要么是普通的一维向量:

代码语言:javascript
复制
point0 = np.array([0, 1, 0, 0])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36751217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档