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 :

Calculer un vecteur à partir de points


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 68
    Par défaut Calculer un vecteur à partir de points
    Bonjour à tous,

    Je vous explique donc mon problème !!

    Dans un premier temps j'aimerais calculer les coordonnées d'un vecteur passant par 2 points donc j'ai les coordonnées.
    Par exemple: j'ai le point A(8, 27) et le point B(6, 27) et j'aimerais retrouver AB (je sais le faire mais pas le programmer !!)

    Le but serais d'importer un fichier avec les coordonnées de A et B et que le traitement soit automatique.

    Dans un second temps j'aimerais calculer ce même vecteur AB mais à des temps différent.

    Pouvez-vous m'aider ?


    Pour le moment je sais faire cela
    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
    x1= -2;
    y1= 5;
    %E = x1, y1
     
    x2= -1;
    y2= 1;
    %C = x2, y2
     
    x3= 3;
    y3= -1;
    %P = x3, y3
     
    U1x = x2 - x1;
    U1y = y2 - y1; 
    U2x = x2 - x3;
    U2y = y2 - y3;
     
    U1 = [U1x U1y];
    U2 = [U2x U2y];
     
    CosTheta = dot(U1,U2)/(norm(U1)*norm(U2));
    ThetaInDegrees = acos(CosTheta)*180/pi
    j'arrive a calculer l'angle entre les 2 vecteurs, mais le traitement est manuel on va dire !! Par la suite j'aurai énormément de données, je ne pourrais donc plus le faire!


    Encore merci

  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
    Par défaut
    Bonjour,

    Effectivement, tu fais touts les opérations les unes après les autres. Ce n'est pas très grave sur ton code car il sera de toute manière quasi instantannée, mais en générale :
    - dans les traitements mathématiques, on utilises le fait que matlab est à l'aise avec les matrices (et les vecteurs)
    - on essaie d'éviter autant que possible les variables intermédiaires (sans enlever de la lisibilité au code)

    Voici une version raccourcie de ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    A = [-2 5];
    B = [-1 1];
    C = [3 1];
    U1 = B-A;
    U2 = C-B;
    ThetaInDegrees = acos(dot(U1,U2)/(norm(U1)*norm(U2)))*180/pi;
    Bon maintenant la vraie question, comment automatiser cette procédure? C'est très simple, il te suffit de faire une fonction (help function) qui prendra en entrées les coordonnées des points et renverra l'angle. Tu pourras ensuite utiliser cette fonction dans un script.
    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 Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Il serait encore plus simple d'utiliser des matrices :
    Au lieu de considérer A comme étant un point, je considère que c'est une matrice de n lignes (n points) tel que la première colonne est la position en X et la seconde la position en Y, donc le premier pointe correspond à A(1,1).

    Même chose pour B.

    Ensuite faire comme il a proposer magelan en changeant les * par .* et / par ./

    A essayer

  4. #4
    Membre émérite Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Par défaut
    peut-être une autre solution si tu es familier de la programmation orientée objet serait de construire un classe vecteur avec une méthode qui te permet de retourner l'angle entre deux instances de la classe

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 68
    Par défaut
    Déjà merci pour toutes vos réponses !
    Dans un premier temps en effet cela ma bien réduit le programme.

    Dans un second temps mon but serait d'importer des données d'un fichier xls ou ascii et ceci dans le but de les intégrer à ce programme.

    En faite, je vais recueillir des coordonnées de points à différent temps. Et le but est justement de pouvoir faire le calcul d'angle entre ces points à différent temps pour obtenir des valeurs sur la variation de l'angle au cours du temps.

    Le seul problème est que c'est la seconde fois que j'utilise matlab !!

    je récapitule :
    -j'ai des coordonnées
    -à t et t+i
    -je veux calculer l'angle entre les points à ces différent t


    Je suis entrain de lire plusieurs article mais ce n'est pas facile à assimiler. Encore merci

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 68
    Par défaut
    Maintenant j'ai fait cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function angle = coord(A,B,C)
     
    U1 = B-A;
    U2 = C-B;
     
    angle = acos(dot(U1,U2)/(norm(U1).*norm(U2))).*180./pi;
     
    end
    et je rentre cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >> angle =coord([8 27],[6 27],[6 24])
    et j'obtiens


    Je vais essayer de créer une autre fonction qui demanderai les coordonnées depuis un fichier importé (xls ascii) et qui ensuite appellerais la fonction précédente

    ???

  7. #7
    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
    Par défaut
    Oui. A partir de maintenant tu peux juste créer un script qui sera ton programme principale dans lequel tu feras :
    l'importation des données. Pour les fichiers excel :
    help xlsread
    pour un fichier texte, si les données sont ordonnées en colonnes :
    help load
    puis le calcul des angles pour différents triplets de points (à l'aide de ta fonction) et stockage dans un tableau
    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.

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

Discussions similaires

  1. Calcul des coordonnée d'un point à partir de 2 points
    Par Spiritkill dans le forum Mathématiques
    Réponses: 5
    Dernier message: 16/04/2013, 01h59
  2. Calculer le vecteur normal a un plan formé par trois points.
    Par parp1 dans le forum Mathématiques
    Réponses: 12
    Dernier message: 11/03/2013, 18h57
  3. Réponses: 0
    Dernier message: 12/01/2013, 13h02
  4. calculer les rotations à partir du vecteur direction
    Par dvince38 dans le forum Moteurs 3D
    Réponses: 3
    Dernier message: 04/07/2010, 05h48
  5. Calcul surface à partir de points
    Par trebua dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/09/2008, 13h12

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