3D向量的旋转?

86
我有两个向量作为Python列表和一个角度。例如:
v = [3, 5, 0]
axis = [4, 4, 1]
theta = 1.2  # In radians.

什么是将向量 v 绕着 axis 旋转后得到的结果向量的最佳/最简单方法?
旋转应该对于一个观察者来说是逆时针的,这个观察者的视角是 axis 向量的指向。这被称为right hand rule

17
我觉得很惊讶,在SciPy(或类似易于使用的软件包)中居然没有这种功能;向量旋转并不算是很奇特的操作。 - Mads Skjern
11个回答

1

我需要围绕嵌入模型的三个轴{x,y,z}之一旋转3D模型,这是在numpy中如何完成此操作的搜索结果。我使用了以下简单的函数:

def rotate(X, theta, axis='x'):
  '''Rotate multidimensional array `X` `theta` degrees around axis `axis`'''
  c, s = np.cos(theta), np.sin(theta)
  if axis == 'x': return np.dot(X, np.array([
    [1.,  0,  0],
    [0 ,  c, -s],
    [0 ,  s,  c]
  ]))
  elif axis == 'y': return np.dot(X, np.array([
    [c,  0,  -s],
    [0,  1,   0],
    [s,  0,   c]
  ]))
  elif axis == 'z': return np.dot(X, np.array([
    [c, -s,  0 ],
    [s,  c,  0 ],
    [0,  0,  1.],
  ]))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接