J'ai créé une bibliothèque assez complète de mathématiques 3D pour Python{2,3}. Elle n'utilise toujours pas Cython, mais s'appuie fortement sur l'efficacité de numpy. Vous pouvez la trouver ici avec pip :
python[3] -m pip install math3d
Ou jetez un coup d'œil à mon gitweb http://git.automatics.dyndns.dk/?p=pymath3d.git et maintenant aussi sur github : https://github.com/mortlind/pymath3d .
Une fois installé, en python, vous pouvez créer l'objet orientation qui peut faire tourner des vecteurs, ou faire partie d'objets de transformation. Par exemple, l'extrait de code suivant compose une orientation qui représente une rotation de 1 rad autour de l'axe [1,2,3], l'applique au vecteur [4,5,6] et imprime le résultat :
import math3d as m3d
r = m3d.Orientation.new_axis_angle([1,2,3], 1)
v = m3d.Vector(4,5,6)
print(r * v)
Le résultat serait
<Vector: (2.53727, 6.15234, 5.71935)>
Cette méthode est plus efficace, d'un facteur d'environ quatre, d'après ce que j'ai pu observer, que la méthode oneliner utilisant scipy postée par B. M. ci-dessus. Cependant, il nécessite l'installation de mon paquetage math3d.
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