Вращение 3D вектора? - PullRequest
60 голосов
/ 23 июля 2011

У меня есть два вектора в виде списков Python и угол.Например:

v = [3,5,0]
axis = [4,4,1]
theta = 1.2 #radian

Каков наилучший / самый простой способ получить результирующий вектор при вращении вектора v вокруг оси?

Вращение должно быть направлено против часовой стрелкина кого указывает вектор оси.Это называется Правило правой руки

Ответы [ 11 ]

0 голосов
/ 09 марта 2019

Мне нужно было повернуть трехмерную модель вокруг одной из трех осей {x, y, z}, в которую была встроена эта модель, и это был лучший результат для поиска того, как это сделать в 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.],
  ]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...