#!/usr/bin/env python # coding: utf-8 # 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 # 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 # 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](http://fr.wikipedia.org/wiki/Matrice_de_rotation) # 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 # In[ ]: