{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "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.\n", "Voyons un exemple :\n", "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 ? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tout d'abord nous allons avoir besoin des fonctions mathématiques de base." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "from math import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ensuite, nous pouvons utiliser les matrices de rotations pour connaitre les nouveaux coordonnés." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.37503091]\n", " [ 5.32533831]]\n" ] } ], "source": [ "a = radians(35)\n", "Rot = np.mat([[cos(a),-sin(a)], [sin(a),cos(a)]])\n", "A = np.mat([[5],[3]])\n", "A_rotate = Rot*A\n", "print A_rotate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Les nouveaux coordonnées de notre vecteur sont x=2,37.. et y=5,32.." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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.\n", "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.\n", "Voyons un exemple :\n", "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 ?\n", "La rotation de mon repère de 70° est équivalente à une rotation du vecteur de -70°." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 4.52917858]\n", " [-3.67240267]]\n" ] } ], "source": [ "a = radians(-70)\n", "Rot = np.mat([[cos(a),-sin(a)], [sin(a),cos(a)]])\n", "A = np.mat([[5],[3]])\n", "A_rotate = Rot*A\n", "print A_rotate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Les coordonnées de notre vecteur dans le nouveau repère sont x=4,5.. et y=-3,67.." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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 ?" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 5.82509129]\n", " [ 5.33050168]\n", " [ 6.2172392 ]]\n" ] } ], "source": [ "U = np.mat([[2],[4],[9]])\n", "a = radians(30)\n", "b = radians(40)\n", "g = radians(50)\n", "Rx = np.mat([[1,0,0], [0,cos(a),-sin(a)], [0,sin(a),cos(a)]])\n", "Ry = np.mat([[cos(b),0,sin(b)], [0,1,0], [-sin(b),0,cos(b)]])\n", "Rz = np.mat([[cos(g),-sin(g),0], [sin(g),cos(g),0], [0,0,1]])\n", "Rot = Rz*Ry*Rx\n", "U_rotate = Rot*U\n", "print U_rotate" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.9" } }, "nbformat": 4, "nbformat_minor": 0 }