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

MATLAB Discussion :

Problème de maths ?


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 35
    Points : 28
    Points
    28
    Par défaut Problème de maths ?
    Bonjour à tous,

    Mon problème n'est pas compliqué à comprendre, je vous explique :

    J'ai trois points dans l'espace qui forment donc deux vecteurs ayant un point commun (le deuxième en l'occurrence). Je souhaite calculer une matrice de rotation qui me permette de passer de l'un à l'autre. De calculer les angles alpha, beta et gamma et bien évidemment de vérifier que ça marche en appliquant la matrice de rotation au premier vecteur pour bien retrouver le second ! Ooula je n'ai peut-être pas été si clair que ça..

    Je vous joints le script, qui ne marche pas...

    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
     
    x=[0 1 4];
    y=[0 1 2];
    z=[0 1 1];
     
    Tx = x(3)-x(2);
    Ty = y(3)-y(2);
    Tz = z(3)-z(2);
     
    T = sqrt(Tx^2+Ty^2+Tz^2);
     
    A=[x(3) y(3) z(3)]'*[x(2) y(2) z(2)];
     
    base = 'ZYX';
     
    beta = atan2( -A(3,1) , sqrt(A(3,2)^2 + A(3,3)^2) )
    alpha = atan2( A(3,2)/cos(beta) , A(3,3)/cos(beta) )
    gamma = atan2( A(2,1)/cos(beta) , A(1,1)/cos(beta) )
     
    R=R(alpha,beta,gamma,base)
    V=T*R(:,2)
    Je vous joints aussi la fonction, mais je suis à 99% sûr qu'il n'y a pas d'erreur dedans !

    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
     
    function R=R(a,b,c,base)
     
    cosd=@(x) cos(x/180*pi);
    sind=@(x) sin(x/180*pi);
     
    Rx=[1, 0, 0; 0, cosd(a), -sind(a); 0, sind(a), cosd(a)];
    Ry=[cosd(b), 0, sind(b); 0, 1, 0; -sind(b), 0, cosd(b)];
    Rz=[cosd(c), -sind(c), 0; sind(c), cosd(c), 0; 0, 0, 1];
     
    switch base
        case {'XZY'}
        R=Rx*Rz*Ry;
     
        case {'XYZ'}
        R=Rx*Ry*Rz;
     
        case {'YXZ'}
        R=Ry*Rx*Rz;
     
        case {'YZX'}
        R=Ry*Rz*Rx;
     
        case {'ZYX'}
        R=Rz*Ry*Rx;
     
        case {'ZXY'}
        R=Rz*Rx*Ry;
    end 
     
    Vous l'aurez donc compris, c'est un problème de maths... enfin je crois
     
    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Quelques remarques:
    • Chose à éviter: appeler une variable du même nom qu'une fonction existante (ici R).
    • La fonction atan2 retourne un angle en radians, donc /180*pi à supprimer (les 1% )
    • Les accolades dans tes case de ton switch sont inutiles
    • Je ne vois pas de vecteurs, mais de simples scalaires...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Désolé du retard pour ma réaction, j'étais indisponible...

    d'accord, j'ai corrigé les erreurs que tu as énoncé ci-dessus mais je ne comprends toujours pas pourquoi A est différent de V.

    Si tu as une idée des formules à appliquer pour effectuer cette conversion, je suis preneur car je sèche totalement. Pourtant j'ai été voir :

    http://jeux.developpez.com/faq/math/...ransformations

    mais ça m'a plus embrouillé les esprits qu'autre chose...

Discussions similaires

  1. Problème fonction Math.IEEERemainder
    Par Merlon dans le forum C#
    Réponses: 4
    Dernier message: 21/03/2008, 14h27
  2. Problème de math ( formule à trouver ? )
    Par luimême dans le forum Mathématiques
    Réponses: 3
    Dernier message: 13/05/2007, 15h23
  3. Problème de math
    Par bert_ dans le forum Mathématiques
    Réponses: 3
    Dernier message: 02/05/2007, 20h31
  4. [Problème] de Maths
    Par eowene dans le forum La taverne du Club : Humour et divers
    Réponses: 7
    Dernier message: 21/04/2007, 14h05
  5. Problème de math....
    Par zdra dans le forum Mathématiques
    Réponses: 6
    Dernier message: 11/11/2002, 10h59

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