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 :

distance minimale entre deux courbes


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2011
    Messages : 27
    Points : 14
    Points
    14
    Par défaut distance minimale entre deux courbes
    Bonjour à tous,

    je voudrai calculer la distance minimale pour chaque points d'une courbe de référence à celle d'une courbe expérimentale.
    C'est à dire pour chaque point de la courbe de référence je cherche le distance minimale qui le sépare du point de la courbe expérimentale le plus proche.

    Par exemple :
    Je calcule la distance 'd' de mon point i à mon point j et je fais varier la position de j entre 1 et 2 et garde la distance minimale .

    Je pensais utiliser une projection orthogonale dans une boucle if et la commande pour trouver la distance minimale mais je me perd dans l'utilisation de plusieurs indices et cela ne fonctionne pas.

    Pourriez-vous m'aider?

    Merci
    Nico76131
    Images attachées Images attachées  

  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,

    Peux-tu nous montrer ce que tu as codé? On t'aidera a le corriger si c'est faux.
    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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2011
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Voici le code que j'ai tapé :


    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
    S1=importdata('Strecke3V.txt');
     
    V=load('Truckhitch.mat');
     
     
     
     
    %V=courbe de référence;
    %S1=courbe expérimentale;
     
    %compteur pour plus tard trouver le j.
    S1(1,4)=1;
    for i=1:length(S1)-1
        S1(i+1,4)=S1(i,4)+1;
     
    end
    for i=1:length(V)
     
        %[x,y,z]= résolution d'un système : vecteurs (V(i+1)_V(i)) et (V(i+1)_X)
        %doivent être orthogonaux et la distance entre V(i+1)et X égale à 20
        [x,y,z]=solve('dot([V(i+1,1)-V(i,1),V(i+1,2)-V(i,2),V(i+1,3)-V(i,3)],[x-V(i+1,1),y-V(i+1,2),z-V(i+1,3)])=0','sqrt(x-S1(i+1,1))^2+(y-V(i+1,2))^2+(z-S1(i+1,3))^2))=20');
     
        %[l,j]avec l facteur proportionnel. Système : vecteurs X1_X et S1(j)_X1 orthogonaux
        % et distance minimale entre S1(j) et X1.
     
        % X1-X=l*(V(i+1)-X)
     
        [l,S1(j,:)]=solve('dot([l*(V(i+1,1)-x),l*(V(i+1,2)-y),l*(V(i+1,1)-z)],[S1(j,1)-(l*(V(i+1,1)-x)+x),S1(j,2))-(l*(V(i+1,2)-y)+y),S1(j,3)-(l*(V(i+1,1)-z)+z)])=0','min(sqrt((S1(j,1)-(l*(V(i+1,1)-x)+x))^2+((S1(j,2)-(l*(V(i+1,2)-y)+y))^2+(S1(j,3)-(l*(V(i+1,1)-z)+z))^2)))');
     
     
        J(i,1)=S1(j,4);
     
     
    end
     
     
     
    %calcul de la distance minimale entre la courbe V et S1 sur l'intervalle j-20:j+20
     
     
    i=20;
     
     for k=J(i,1)-20:J(i,1)+20
        D1(i,1)=sqrt((V(i,1)-S1(j,1))^2+((V(i,2)-V(j,2))^2+(V(i,3)-S1(j,3))^2));
        find(min(D1(i,1)));
        i=i+1;
     end
    J'ai essayé de vous faire un petit dessin explicatif pour mieux s'imaginer ce que je tente de programmer.

    Merci
    Images attachées Images attachées  

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2011
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    j'ai revu mon code et ai changé quelques petites choses.
    Je traduit mon orthogonalité cette fois avec et non plus .
    Malheureusement la résolution du système n'aboutit pas. Il m'écrit pourtant dans le Workspace x,y et z mais ce sont des cellules vides.
    Voici mon nouveau 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    %V=courbe de référence;
    %S1=courbe expérimentale;
    S1(1,4)=1;
    for i=1:length(S1)-1
        S1(i+1,4)=S1(i,4)+1;
     
    end
    for i=1:length(V)
     
        %[x,y,z]= résolution d'un système : vecteurs (V(i+1)_V(i)) et (V(i+1)_X)
        %doivent être orthogonaux et la distance entre V(i+1)et X égale à 20
        [x,y,z]=solve('subspace([(V(i+1,1)-V(i,1)) (V(i+1,2)-V(i,2)) (V(i+1,3)-V(i,3))],[(x-V(i+1,1))(y-V(i+1,2))(z-V(i+1,3))])-pi/2', '(x-V(i+1,1))^2+(y-V(i+1,2))^2+(z-V(i+1,3))^2-400');
     
        %[l,j]avec l facteur proportionnel. Système : vecteurs X1_X et S1(j)_X1 orthogonaux
        % et distance minimale entre S1(j) et X1.
     
        % X1-X=l*(V(i+1)-X)
     
        [l,S1(j,:)]=solve('subspace([l*(V(i+1,1)-x),l*(V(i+1,2)-y),l*(V(i+1,3)-z)],[S1(j,1)-(l*(V(i+1,1)-x)+x),S1(j,2))-(l*(V(i+1,2)-y)+y),S1(j,3)-(l*(V(i+1,3)-z)+z)])-pi/2','min((S1(j,1)-(l*(V(i+1,1)-x)+x))^2+((S1(j,2)-(l*(V(i+1,2)-y)+y))^2+(S1(j,3)-(l*(V(i+1,3)-z)+z))^2))');
     
     
        J(i,1)=S1(j,4);
     
     
    end
     
     
     
    %calcul de la distance minimale entre la courbe V et S1 sur l'intervalle j-20:j+20
    i=1;
     
     for k=J(i,1)-20:J(i,1)+20
        D1(i,1)=sqrt((V(i,1)-S1(j,1))^2+((V(i,2)-V(j,2))^2+(V(i,3)-S1(j,3))^2));
        find(min(D1(i,1)));
        i=i+1;
     end
    Si quelqu'un peut m'aider,
    Merci d'avance.

Discussions similaires

  1. Distance de Kolmogorov Smirnov entre deux courbes
    Par julinge dans le forum MATLAB
    Réponses: 3
    Dernier message: 22/10/2014, 14h49
  2. Différence entre deux courbes
    Par malokox dans le forum Signal
    Réponses: 2
    Dernier message: 24/06/2008, 10h15
  3. Distance euclidienne entre deux vecteurs
    Par soumiaguelma dans le forum MATLAB
    Réponses: 3
    Dernier message: 26/04/2008, 10h32
  4. Distance euclidienne entre deux vecteurs
    Par larimoise dans le forum MATLAB
    Réponses: 3
    Dernier message: 02/04/2007, 22h44
  5. [VBA E]Colorier l'espace entre deux courbes
    Par conconbrr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/07/2006, 09h19

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