Rotation d'un vecteur
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

Rotation d'un vecteur



  1. #1
    Skippy le Grand Gourou

    Rotation d'un vecteur


    ------

    Salut,

    Je m'en remets une fois de plus à vous pour un problème de géométrie élémentaire. Je pense avoir résolu ce problème, mais par des calculs ridiculement compliqués au regard de la simplicité de l'énoncé, et comme ça doit être intégré dans une boucle d'un programme avec un grand nombre d'évènements, j'aimerais une solution plus simple si elle existe…

    Le problème est le suivant*: j'ai deux vecteurs unitaires quelconques (disons u et v) dans l'espace tridimensionnel, dont je connais les coordonnées (cartésiennes). Je souhaite déterminer les coordonnées du vecteur u' issu de la rotation du vecteur u par un angle θ dans le plan (u,v).

    Est-ce que quelqu'un voit une solution en quelques lignes*? Les miennes passent soit par plusieurs changements de repères avec rotation, soit par trigonométrie sphérique…

    Merci.

    -----

  2. #2
    Celestion

    Re : Rotation d'un vecteur

    Bonsoir,

    Voici ce que je vous propose :
    Calculez un vecteur
    (Produit vectoriel)
    Soit P la matrice constituée des vecteurs u, v et w en colonnes.
    Et R la matrice de rotation définie comme suit :

    alors

  3. #3
    Skippy le Grand Gourou

    Re : Rotation d'un vecteur

    Merci, c'est effectivement beaucoup plus simple*!

  4. #4
    Skippy le Grand Gourou

    Re : Rotation d'un vecteur

    Mmh… C'est effectivement beaucoup plus simple présenté comme ça, mais en termes de calculs ça ne l'est pas vraiment. Je compte environ 85 opérations complexes (lentes au niveau informatique : multiplications, cosinus…), contre environ 35 pour ma méthode géométrique. J'en déduis qu'il va être difficile de faire plus court ?

  5. A voir en vidéo sur Futura
  6. #5
    invite091bc544

    Re : Rotation d'un vecteur

    Petite simplification :
    Comme w est défini comme le produit vectoriel normalisé de u et v, det(P) = 1
    Donc l'inverse de P peut se calculer sans division

  7. #6
    Skippy le Grand Gourou

    Re : Rotation d'un vecteur

    Citation Envoyé par ydethe Voir le message
    Petite simplification :
    Comme w est défini comme le produit vectoriel normalisé de u et v, det(P) = 1
    Donc l'inverse de P peut se calculer sans division
    Euh… Tu es sûr de ça ? J'ai plutôt l'impression que le déterminant est égal à la norme du produit vectoriel de u et v, avant normalisation, ou bien j'ai raté un wagon…

  8. #7
    ansset
    Animateur Mathématiques

    Re : Rotation d'un vecteur

    pourquoi voulez vous passer par w ( produit vectoriel )
    on peut facilement chercher v' perpendiculaire à u dans le plan (u,v)
    par exemple
    v'=u+av et en ecrivant ( a scalaire )
    v'.u=0 ( produit scalaire )
    puis ramener v' à la même norme que u.

    et enfin
    u'=cos(theta)u+sin(theta)v'

  9. #8
    Celestion

    Re : Rotation d'un vecteur

    Citation Envoyé par Skippy le Grand Gourou Voir le message
    Euh… Tu es sûr de ça ? J'ai plutôt l'impression que le déterminant est égal à la norme du produit vectoriel de u et v, avant normalisation, ou bien j'ai raté un wagon…
    Oui, dit autrement :
    La matrice représente une rotation dans une autre base, son déterminant est donc soit 1 soit -1, selon le sens de rotation.


    Mmh… C'est effectivement beaucoup plus simple présenté comme ça, mais en termes de calculs ça ne l'est pas vraiment. Je compte environ 85 opérations complexes (lentes au niveau informatique : multiplications, cosinus…), contre environ 35 pour ma méthode géométrique. J'en déduis qu'il va être difficile de faire plus court ?
    Ma solution n'est pas optimale, en théorie seule les composantes de w, le vecteur normal au plan, sont utiles. Il y a donc à coup sûr une méthode plus performante.
    Quelle est ta solution ?

  10. #9
    Skippy le Grand Gourou

    Re : Rotation d'un vecteur

    Citation Envoyé par ansset Voir le message
    pourquoi voulez vous passer par w ( produit vectoriel )
    on peut facilement chercher v' perpendiculaire à u dans le plan (u,v)
    par exemple
    v'=u+av et en ecrivant ( a scalaire )
    v'.u=0 ( produit scalaire )
    puis ramener v' à la même norme que u.

    et enfin
    u'=cos(theta)u+sin(theta)v'
    Formidable !

    Arrivé à ce niveau de simplicité, je ne pense pas qu'on puisse faire beaucoup mieux. Merci à tous !

    Edit : Pas vu la réponse de Célestion, j'y réponds de suite.

  11. #10
    Skippy le Grand Gourou

    Re : Rotation d'un vecteur

    Citation Envoyé par Celestion Voir le message
    Oui, dit autrement :
    La matrice représente une rotation dans une autre base, son déterminant est donc soit 1 soit -1, selon le sens de rotation.
    Attention, ydethe parle du déterminant de P, non du produit des trois matrices.

    Citation Envoyé par Celestion Voir le message
    Ma solution n'est pas optimale, en théorie seule les composantes de w, le vecteur normal au plan, sont utiles. Il y a donc à coup sûr une méthode plus performante.
    Quelle est ta solution ?
    La méthode d'ansset est vraisemblablement la plus simple, en plus elle se code en 30s et fonctionne de suite, alors que j'ai pas fini de débuguer ta solution et la mienne…

    Ma méthode était purement géométrique. En notant A, B et C les points définis sur la sphère unitaire par v, u et u', je considère les triangles rectangles formés par le grand cercle qui contient A, B et C avec les méridiens qui passent par A et B et dont deux des sommets sont parmi A, B et C. Je connais tous les angles du triangle de sommets A et B (définis par l'angle entre u et v, la colatitude de A et la différence de longitude entre A et B (qui ne donne pas directement le troisième angle sphérique, mais on peut se débrouiller grâce au fait que le triangle isocèle qui donne sur le centre et celui inclus dans le plan de latitude ont un côté commun, et connaissant leur rayon)), et je connais l'hypothénuse du triangle de sommets B et C. En jouant avec la formule des sinus et la formule des cosinus en géométrie sphérique, on peut retrouver les deux angles manquant sur le triangle de sommets B et C, et donc remonter à la différence de latitude et à la différence de longitude.

    Si c'est pas clair ou si quelqu'un tient vraiment à voir les détails de la démonstration, je peux la recopier au propre et la scanner (je viens d'essayer avec le brouillon, mais ça rend très mal et j'ai la flemme d'insister pour rien), mais je vous préviens, j'écris très mal…

  12. #11
    ansset
    Animateur Mathématiques

    Re : Rotation d'un vecteur

    merci,
    mais je n'ai pas verifié si ma methode assurait le bon sens de rotation, mais je crois que ça marche.

    désolé, je suis un faignant !

  13. #12
    ansset
    Animateur Mathématiques

    Re : Rotation d'un vecteur

    Citation Envoyé par ansset Voir le message
    merci,
    mais je n'ai pas verifié si ma methode assurait le bon sens de rotation, mais je crois que ça marche.

    désolé, je suis un faignant !
    bon, j'ai verifié.
    car tout depend de l'angle initial entre u et v.
    mais la solution est toute simple.
    si le a obtenu est négatif ( angle aigu entre u et v ) on retrouvera un v' du "mauvais coté", et il convient juste de prendre -alpha et pas alpha.
    ( juste une ligne de code )

  14. #13
    Skippy le Grand Gourou

    Re : Rotation d'un vecteur

    Effectivement, je n'avais pas pensé à vérifier ce point… Je reformule parce que ton alpha n'est pas défini et que ça dépend également d'une autre convention : si l'angle theta vise à agrandir l'écart par rapport à v, et si l'angle entre u et v est aigu (a<0), u'=cosθ.u+sinθ.v, sinon u'=cosθ.u-sinθ.v.

    J'en profite pour revenir sur le nombre d'opérations, digression sans doute inutile mais sait-on jamais : en C++, ma solution, qui comprend moins d'opérations mais essentiellement des opérations trigonométriques, est sans doute préférable à celle de Célestion, qui comprend essentiellement des multiplications, la différence de temps d'exécution entre les opérations trigonométriques et les multiplications semblant assez faible. En revanche, en fortran 77, qui est le langage avec lequel je travaille actuellement, les opérations trigonométriques semblent bien plus longues, et la solution de Célestion est probablement plus rapide.

    Ceci étant, je vais plutôt garder la solution d'ansset.

  15. #14
    ansset
    Animateur Mathématiques

    Re : Rotation d'un vecteur

    Citation Envoyé par Skippy le Grand Gourou Voir le message
    si l'angle theta vise à agrandir l'écart par rapport à v, et si l'angle entre u et v est aigu (a<0), u'=cosθ.u+sinθ.v, sinon u'=cosθ.u-sinθ.v.
    ? ce n'st pas plutôt l'inverse,
    mais il faut juste verifier avec le programme , c'est l'un ou l'autre.
    sinon, je comprend parfaitement ton soucis d'optimiser les opérations chères en calcul comme la trigo.
    j'ai fait des programmes pour les images de synthèse pendant pas mal d'années ( en fortran d'abord et en C après ).
    et je passais autant de temps à trouver le bon algo qu'a l'optimiser après !!!

  16. #15
    Skippy le Grand Gourou

    Re : Rotation d'un vecteur

    Non, c'est bien ça.

    (Aujourd'hui on le fait dans l'autre sens, en C d'abord et en fortran après… )

Discussions similaires

  1. vecteur rotation
    Par invite92664de4 dans le forum Physique
    Réponses: 0
    Dernier message: 24/04/2009, 19h55
  2. vecteur rotation
    Par invite92664de4 dans le forum Physique
    Réponses: 1
    Dernier message: 03/04/2009, 08h52
  3. Vecteur rotation
    Par Infra_Red dans le forum Physique
    Réponses: 3
    Dernier message: 10/02/2008, 11h22
  4. Vecteur Rotation
    Par invite42abb461 dans le forum Physique
    Réponses: 2
    Dernier message: 23/10/2006, 20h02
  5. Vecteur rotation
    Par invite06179cfd dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 08/05/2006, 12h23