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 :

Calcul d'angles pleins


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 182
    Points : 52
    Points
    52
    Par défaut Calcul d'angles pleins
    Hello à toutes et à tous,

    J'écris pour une question toute bête sur le calcul d'angles entre deux droites. Plus précisément je recherche l'angle (plein) counter-clockwise formé par deux droites lors du parcours d'un chemin de droites d'un point A à un point B.
    Un petit schéma sera mieux qu'un long discours (fait main en plus!):


    Je me suis penché sur le topic sacrément bien détaillé chez Mathworks à cette adresse: http://www.mathworks.com/matlabcentr..._thread/151925.

    En appliquant leur principe, je calcule les angles, et j'obtiens des résultats parfois étonnant (affichés en degrés, en regard du 2ème angle, qui est inférieur à 270° et du 5ème angle, qui me semble un peu sous estimé):


    Je me suis sans aucun doute trompé en appliquant tout ça, mais j'ai creusé dans tout les sens, et j'aboutis toujours au même résultat. Je vous détaille mon code:

    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
     
    for i=1:size(data,1)-2
     
    xy1 = data(i,:);    %1er point
    xy2 = data(i+1,:);  %2me point
    xy3 = data(i+2,:);  %3me point
     
    %recupere la direction des vecteurs:
    x1 = xy1(1) - xy2(1);
    y1 = xy1(2) - xy2(2);
    x2 = xy3(1) - xy2(1);
    y2 = xy3(2) - xy2(2);
     
    angleR = mod(atan2(x1*y2-x2*y1,x1*x2+y1*y2),2*pi);
     
    %Sauve en radians / degrees
    angles(i,:) = [angleR, angleR * 180/pi];
     
    end
    Merci par avance à ceux qui pourront me donner un coup de main!

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    a priori, je dirais que l'erreur vient de l'affectation des points xyi, es-tu sûr qu'à chaque fois le point xy2 est bien le point commun aux deux segments?

    Si ce n'est pas cela, peux-tu nous donner un exemple de points que tu utilises pour faire des tests?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 182
    Points : 52
    Points
    52
    Par défaut
    Tout à fait, voici le jeu de données utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      9.6598121e+005  1.1381717e+006
      9.6597537e+005  1.1381441e+006
      9.6598688e+005  1.1381589e+006
      9.6598294e+005  1.1382117e+006
      9.6598794e+005  1.1381229e+006
      9.6598819e+005  1.1381611e+006
      9.6598367e+005  1.1381821e+006

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Ok, en fait il n'y a pas d'erreur dans le calcul, c'est l'affichage qui n'est pas correct : l'échelle n'est pas la même en abscisse et en ordonnée, fait un petit axis equal et tout devrait rentrer dans l'ordre.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 182
    Points : 52
    Points
    52
    Par défaut
    Bien vu!!
    Et dire que j'ai passé plusieurs heures à me prendre la tête...
    Merci pour l'aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul d'angle entre deux vecteurs
    Par feynman dans le forum Fortran
    Réponses: 8
    Dernier message: 22/09/2007, 13h59
  2. Calcul d'angle entre 2 vecteurs - direction
    Par lothei dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 03/09/2007, 19h29
  3. Calcul d'angles
    Par Giansolo dans le forum Octave
    Réponses: 3
    Dernier message: 27/02/2007, 19h00
  4. calcule d'angle entre 3 points d'une matrice
    Par bmw13fr dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 08/04/2006, 18h56
  5. calculer un angle
    Par m.nico dans le forum Langage
    Réponses: 7
    Dernier message: 05/11/2003, 20h55

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