IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

rotation matriciel d'un vecteur


Sujet :

Mathématiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut rotation matriciel d'un vecteur
    J'effectue une rotation de 90 degrés selon l'axe des y pour un vecteur de coordonner 1,0,0.


    Le resultat est 0,0,0, Je suppose que ce n'est pas normal.Je m'attends a un 0,0,1
    Ma matrice de rotation:
    0 0 -1
    0 1 0
    1 0 0

    Que je suppose être bonne mais à voir avec vous.

    et mon calcul pour les nouvelles coordonnées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    newx=oldx*matrice[0]+oldy*matrice[1]+oldx*matrice[2];
    newy=oldx*matrice[3]+oldy*matrice[4]+oldx*matrice[5];
    newz=oldx*matrice[6]+oldy*matrice[7]+oldx*matrice[8];
    Qui devrait être correct, enfin selon les formules mathemathique, ensuite je les ais peut-être mal implémenter, qu'en pensez-vous?

  2. #2
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    c'est bon, en fait dans mon code j'avais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    oldx=oldx*.....;
    oldy=oldy*...;
    oldz=oldz*....;
    a la place de newx .....

    Encor une fois la magie de DVP me permet de decouvrir mon erreur au moment de la poster

  3. #3
    Membre émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Par défaut élargir à une rotation quelconque en 3D
    pour tourner un point [x,y,z] d'un angle Theta autour d'une droite passant par [x0,y0,z0] et de direction [u,v,w]

    si U^2 + V^2 + W^2 = 1 alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
     
     (*
           rotating the point (x,y,z)
           about the line through (a,b,c) with direction vector u,v,w
           (where u^2 + v^2 + w^2 = 1) by the angle Theta.
           H:=u*x+v*y+w*z
           f(x,y,z,a,b,c,u,v,w,Theta) =
           [a.(v^2+w^2) - u.(bv+cw-H)].(1-cos(Theta)) + x.cos(Theta) + (-cv+bw-wy+vz).sin(Theta)
           [b.(u^2+w^2) - v.(au+cw-H)].(1-cos(Theta)) + y.cos(Theta) + (-aw+cu-uz+wx).sin(Theta)
           [c.(u^2+v^2) - w.(au+bv-H)].(1-cos(Theta)) + z.cos(Theta) + (-bu+av-vx+uy).sin(Theta)
           *)
       var HX : double;
       function RT( X,Y,Z,
                    a,b,c,
                    u,v,w,
                    T : double;
                    n : integer
                    ) : double;
          begin
     
          Result:=0;
          case n  of
             1 :
             Result:=
              (a*(sqr(v)+sqr(w)) - u*(b*v+c*w-HX))*(1-cos(T))
              + x*cos(T)
              + (-c*v+b*w-w*y+v*z)*sin(T);
             2 :
             Result:=
              (b*(sqr(u)+sqr(w)) - v*(a*u+c*w-HX))*(1-cos(T))
              + y*cos(T)
              + (-a*w+c*u-u*z+w*x)*sin(T);
             3 :
             Result:=
              (c*(sqr(u)+sqr(v)) - w*(a*u+b*v-HX))*(1-cos(T))
              + z*cos(T)
              + (-b*u+a*v-v*x+u*y)*sin(T);
             end;
          end;
       procedure Rotate(  x,y,z,      // point a déplacer
                          a,b,c,      // 1 point de l'axe
                          U,V,W,       // vecteur directeur de l'axe de norme 1
                          Theta : double; // rotation en radian
                        var x_destination,y_destination,z_destination // point image du point à déplacer
                        : double
                        );
          begin
          HX:=sqr(U) + sqr(V) + sqr(W); // norme^2 de [u,v,w]
          if HX < 1e-100 then exit;   // vecteur directeur proposé  nul
          HX:= 1/sqrt(HX); // 1/norme
          U:= U*HX; V:=V*HX; W:=W*Hx; // normalisation du vecteur directeur
          HX:= U * x +
               V * y +
               W * z; //coefficient utilisé dans RT
          x_destination:= RT(x, y, z, a, b, c, U, V, W, Theta,1);
          y_destination:= RT(x, y, z, a, b, c, U, V, W, Theta,2);
          z_destination:= RT(x, y, z, a, b, c, U, V, W, Theta,3);
          end;

Discussions similaires

  1. position, rotation, vecteurs et quaternions
    Par Acropole dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 12/08/2009, 12h18
  2. conversion info vecteur en info matricielle
    Par scott88 dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/03/2009, 22h11
  3. Tracé de rotation du vecteur de Fresnel
    Par druide87 dans le forum Composants VCL
    Réponses: 0
    Dernier message: 16/12/2007, 17h36
  4. [Calcul Matriciel] Vecteur propre de I
    Par riadh_ado dans le forum Mathématiques
    Réponses: 2
    Dernier message: 18/05/2007, 21h32
  5. Récupérer le vecteur de rotation
    Par mister3957 dans le forum DirectX
    Réponses: 6
    Dernier message: 09/12/2006, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo