Les matrices de rotations permettent de calculer des mouvements dans l'espace en changeant de référentiel. Pour cela, on effectue une rotation centrée sur l'origine de notre repère. Voyons un exemple : J'ai le vecteur A, x=5 et y=3. Je fais effectuer une rotation de 35° à ce vecteur et je veux connaitre ses nouveaux coordonnées dans l'espace ?

Tout d'abord nous allons avoir besoin des fonctions mathématiques de base.


In [1]:
import numpy as np
from math import *

Ensuite, nous pouvons utiliser les matrices de rotations pour connaitre les nouveaux coordonnés.


In [2]:
a = radians(35)
Rot = np.mat([[cos(a),-sin(a)], [sin(a),cos(a)]])
A = np.mat([[5],[3]])
A_rotate = Rot*A
print A_rotate


[[ 2.37503091]
 [ 5.32533831]]

Les nouveaux coordonnées de notre vecteur sont x=2,37.. et y=5,32..

Il faut bien comprendre qu'une rotation d'un vecteur selon un angle alpha est exactement identique a effectuer une rotation du repère selon un angle -alpha. En effet, soit vous laisser le repère fixe est vous faîte tourner le vecteur de 35°, soit vous laisser le repère fixe et vous tourner le repère de -35°, le résultat de l'un par rapport à l'autre est strictement identique. Cela veut dire que lorsque j'ai un vecteur A dans un repère XY, je peux connaitre les coordonnées de ce même vecteur dans le repère XY' résultat d'une rotation du repère XY. Voyons un exemple : J'ai le vecteur A, x=5 et y=3. J'effectue une rotation du repère de 70°, je desire connaitre les coordonnées de A dans le nouveau repère ? La rotation de mon repère de 70° est équivalente à une rotation du vecteur de -70°.


In [25]:
a = radians(-70)
Rot = np.mat([[cos(a),-sin(a)], [sin(a),cos(a)]])
A = np.mat([[5],[3]])
A_rotate = Rot*A
print A_rotate


[[ 4.52917858]
 [-3.67240267]]

Les coordonnées de notre vecteur dans le nouveau repère sont x=4,5.. et y=-3,67..

La même technique s'applique pour des modifications de repère dans l'espace. Il faut alors utiliser les matrices de rotation en 3 dimensions. Vous pouvez trouver ces matrices ici

Imaginons un exemple avec un vecteur déplacement U (2,4,9). Le repère subit 3 rotations suivant les axes x, y et z de 30° autour de l'axe x puis de 40° autour de l'axe y et enfin de 50° autour de l'axe z. Qu'elle sont les coordonnées du vecteur U dans le nouveau repère ?


In [3]:
U = np.mat([[2],[4],[9]])
a = radians(30)
b = radians(40)
g = radians(50)
Rx = np.mat([[1,0,0], [0,cos(a),-sin(a)], [0,sin(a),cos(a)]])
Ry = np.mat([[cos(b),0,sin(b)], [0,1,0], [-sin(b),0,cos(b)]])
Rz = np.mat([[cos(g),-sin(g),0], [sin(g),cos(g),0], [0,0,1]])
Rot = Rz*Ry*Rx
U_rotate = Rot*U
print U_rotate


[[ 5.82509129]
 [ 5.33050168]
 [ 6.2172392 ]]

In [ ]: