rotations

Bonjour,
j'ai un nuage de points dans l'espace 3D et je voudrais effectuer une rotation d'angle theta fixé de ce nuage de points par rapport à l'axe défini par la droite passant par le centre de gravité du nuage (xg,yg,zg) et un autre point quelconque (x0,y0,z0). En termes matriciels, si je considère que mon nuage de points peut etre représenté par une matrice M dont chaque ligne représente les coordonnées d'un individu (point) dans l'espace, je sais que pour effectuer cette rotation , il faut multiplier M par une matrice de rotation R(Theta).

mon problème est que je ne vois pas comment intégrer dans la matrice R(theta) le fait que la rotation doit passer par l'axe souhaité, car l'axe de rotation noté u vérifie : R.u=u, (en d'autre terme u fait partie du sous espace propre de R lié à la valeur propre 1) mais si je me calcule une matrice de rotation R(pi/4) grace a leur forme connue (avec les cos(theta) et sin(theta)) et que je fais M*R(pi/4) je ne suis pas sur que la rotation ayant donné le nouveau nuage s'est faite selon l'axe passant par le centre de gravité du nuage (xg,yg,zg) et du point (x0,y0,z0) ?

Est que cela veut dire qu'il faut d'abord déterminer mon axe u souhaité, puis déterminer la matrice de rotation R à partir de cet axe avec les équations suivantes : Ru=u et t(R)*R=I ?? c'est pas du tout clair dans ma tete. Si quelqu'un voit de quoi je parle, je serai ravi de connaitre ses réponses.

Merci d'avance pour vos réponses.

Réponses

  • Bonjour,

    Je note \((e_x,e_y,e_z)\) la base orthonormée dans laquelle tu travailles avec les coordonnées \((x,y,z)\).

    Je note \(\mathbf{R}.u\) la droite engendrée par le vecteur unitaire \(u\), orientée par ce vecteur, ce qui oriente le plan perpendiculaire afin de pouvoir mesurer l'angle \(\theta\) de la rotation

    Si \(M\) est la matrice de la rotation d'axe \(\mathbf{R}.e_z\) et d'angle \(\theta\), si \(A\) est la matrice d'un demi-tour tel que : \(A.e_z = u\), alors la matrice de la rotation d'axe \(\mathbf{R}.u\) et d'angle \(\theta\) est \(AMA\).
  • merci beaucoup gb, pour votre réponse.
    Il y a encore quelque chose que je n ai pas compris, la matrice de demi tour A , a-t-elle une forme connue, ou je dois la trouver à partir de l'équation : A.ez=u ?? parce que si je connais deja sa forme à quoi me sert cette équation ??
  • Un demi-tour, c'est la symétrie orthogonale par rapport à son axe.

    Je suppose que l'axe de la rotation dont tu cherches la matrice est dirigé par le vecteur \(u\), unitaire comme \(e_z\). On peut alors utiliser le demi-tour dont l'axe est dirigé apr \(e_z+u\) ; il est défini par :
    \[x \mapsto 2\frac{(x|e_z+u)}{\lVert e_z+u \rVert^2} (e_z+u)-x\]
    ce qui permet d'avoir très rapidement sa matrice :
    \[A = \frac{2}{\lVert e_z+u \rVert^2}CC^\top-I\]
    où \(C\) est la colonne des coordonnées du vecteur \(e_z+u\), \(C^\top\) la ligne transposée de \(C\) et \(I\) la matrice unité.
  • Bonsoir,
    Je voudrais aussi savoir si dans le cas ou je veux faire tourner mon nuage de points composé de n points dans R^3:
    dois-je multiplier mon tableau mis sous forme de matrice de Mn,3(R) par une matrice de rotation de format 3x3 à droite
    ou le multiplier par une matrice de rotation de format nxn à gauche ??
    J'ai vu que dans certains cas, il multipliaient à gauche la matrice du tableau de données par une matrice R de rotation, mais dans mon cas, comme mon tableau est en 3D : je me dis que l'axe de rotation est en 3D, donc ma matrice de rotation doit etre de format 3x3, mais dans ce cas la multiplication doit etre à droite pour que le produit matriciel soit valable.....
  • Bonsoir,

    Tu représente chaque point 3D par une colonne : ton nuage de n points est représenté par une matrice à 3 lignes et n colonnes.
    Tu la multiplies à gauche par la matrice 3x3 de la rotation que tu as déterminée, et tu obtiens une nouvelle matrice à 3 lignes et n colonnes.

    Si tu travailles avec des matrices à n lignes et 3 colonnes, il faut donc les transposer le temps de faire agir la rotation.
    Si tu veux conserver ton format et multiplier à droite, il faut utiliser la transposée de la matrice de rotation…
Connectez-vous ou Inscrivez-vous pour répondre.