79 votes

Rotation d'un vecteur 3D ?

J'ai deux vecteurs sous forme de listes Python et un angle. Par exemple :

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

Quelle est la meilleure façon d'obtenir le vecteur résultant lors de la rotation du vecteur v autour de l'axe ?

La rotation doit apparaître dans le sens inverse des aiguilles d'une montre pour un observateur vers lequel pointe le vecteur de l'axe. C'est ce qu'on appelle le règle de la main droite

14 votes

Je trouve très surprenant qu'il n'y ait pas de fonctionnalité pour cela dans SciPy (ou un paquetage similaire facilement accessible) ; la rotation de vecteurs n'est pas si exotique.

3 votes

Aujourd'hui, c'est le cas : scipy.spatial.transform.Rotation.from_rotvec

1voto

duhaime Points 494

J'avais besoin de faire pivoter un modèle 3D autour d'un des trois axes {x, y, z} dans lequel ce modèle était intégré et c'était le premier résultat d'une recherche sur comment faire cela en numpy. J'ai utilisé la fonction simple suivante :

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.],
  ]))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X