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 :

Marquage de points sur une figure issue d'un "quiver"


Sujet :

MATLAB

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 20
    Par défaut Marquage de points sur une figure issue d'un "quiver"
    Bonjour tout le monde,


    Mon problème est le suivant : je dispose d'un champ de vitesse (obtenu grâce a la fonction quiver) et, grâce à une boucle, j'ai obtenu des données concernant chacun des points en lesquels la vitesse a été calculée.

    Ainsi, seuls certains points que j'ai identifiés m'interessent et j'aimerais pouvoir les marquer en incorporant quelques lignes de code dans la boucle par exemple car je dois analyser de nombreux champs de vitesse.

    Cependant, j'ai lu dans l'aide que je ne pouvais pas utiliser la fonction "brush" sur une figure issue d'un quiver.


    Auriez-vous une idée de la manière dont je pourrais m'y prendre s'il vous plaît ?

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Bonjour

    Comment souhaites-tu les marquer?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 20
    Par défaut
    Bonsoir,

    Je souhaiterais les faire apparaître d'une autre couleur par exemple

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut Marquage de points
    Bonjour,

    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    clear
    [x,y] = meshgrid(0:.2:2,-1:.15:1);
    z = x .* exp(-x.^2 - y.^2); 
    [px,py] = gradient(z,.2,.15);
    quiver(x,y,px,py);
    axis image
    hold on
    plot(x(:,8),y(:,8),'.r','MarkerSize',20)

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 20
    Par défaut
    Bonjour,

    Merci beaucoup pour votre reponse, je viens d'essayer de l'inclure dans ma boucle mais sans succes. Par ailleurs, pourriez vous me dire ce que fait la ligne correspondant au plot s'il vous plait ? Car elle semble marquer tous les points d'abscisse x=1.4 mais je ne vois pas trop le rapport avec le code
    Je vais exposer mon probleme : j'ai un maillage de 256*256 = 65536 points de mesures (chaque k correspond a un point). Pour chacun de ces points je possede 4 mesures(la position selon x, la position selon y, la composante du vecteur vitesse selon x, la composante du vecteur vitesse selon y.
    Toutes ces informations figurent dans un tableau de 65536 lignes, une ligne correspondant a chacun des points et aux mesures faites en ce point.

    L'objectif etait de creer une matrice M definie en chacun de ses points, d'etudier les 2 valeurs propres de chacune de ces matrices et de ne garder que les points correspondant a une matrice M ayant deux valeurs propres negatives.
    On a M = S^2 + O^2 donc j'ai cree une fonction "s" qui me donne les 4 composantes de S et une fonction "o" qui me donne celles de O.
    J'ai notamment cree une fonction "indgrille" pour avoir l'equivalence entre la valeur de k et position dans le maillage (i-eme ligne et j-ieme colonne)
    afin de faciliter l'analyse du champ de vitesse.
    Voici 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
     
    for k=257:65536 
    [s1,s2,s3,s4]=s(k,Ux,X,Uy,Y);      %J'ai les composantes de S
    S=[s1 s2 ; s3 s4];
    S2=S*S;
    [o1,o2,o3,o4]=o(k,Ux,X,Uy,Y);     %J'ai les composantes de O
    O=[o1 o2 ; o3 o4];                     
    O2=O*O;
    M=O2+S2;
    lambda=eig(M);                         %Valeurs propres de O^2 + S^2
    [i,j]=indgrille(k);
        if lambda(1)<0 && lambda(2)<0 && j<45 && j>35;
        k 
        end
    end
    Mon nouvel objectif est de pouvoir marquer directement sur le champ de vitesse tous les points (correspondant a certains k) qui repondent a ma condition en lancant le programme ci-dessus modifie.
    Cependant, je ne vois pas comment incorporer le systeme de marquage dans la boucle ainsi que le quiver.

    J'avais pense a creer un vecteur qui stockerait toutes les valeurs de k qui satisfont les conditions puis de faire un autre programme pour marquer les points correspondant a ces k.

    Je suis desole pour ce pave mais je voulais etre precis,


    Merci d'avance,

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 20
    Par défaut
    Finalement, j'ai mis ce 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
     
    for k=257:10000 
    [s1,s2,s3,s4]=s(k,Ux,X,Uy,Y);
    S=[s1 s2 ; s3 s4];
    S2=S*S;
    [o1,o2,o3,o4]=o(k,Ux,X,Uy,Y);
    O=[o1 o2 ; o3 o4];
    O2=O*O;
    M=O2+S2;
    lambda=eig(M);
    [i,j]=indgrille(k);
        if lambda(1)<0 && lambda(2)<0 && j<45 && j>35;
        k ;
        quiver(X,Y,Ux,Uy);
        hold on
        plot(X(k),Y(k),'.r','MarkerSize',10);
        end
    end
    Cela marche mais, normalement, en incluant le graphe dans la boucle, je devrais avoir enormement de graphes differents avec le marquage d'un seul point par graphe non ?
    Or la, j'obtiens une seule figure avec tous les points qui satisfont les conditions marques en rouge.

    Le dernier souci est que je ne peux pas lancer le programme pour toutes les valeurs de k en une fois car je recois un message d'erreur, peut etre du a un manque de memoire vu la quantite de donnees a traiter ?

    Voici le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Warning: Error occurred while evaluating listener callback. 
    > In quiver at 75
      In boucle at 13 
    Error using vertcat
    Out of memory. Type HELP MEMORY for your options.
     
    Error in specgraph.quivergroup/refresh (line 110)
        vv = [y;y+v;repmat(NaN,size(u))];
     
    Error in specgraph.quivergroup/schema>LdoDirtyAction (line 237)
      refresh(h);
    Sauriez-vous d'ou vient le probleme s'il vous plait ?

    Merci d'avance

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut Marquage de points
    Bonjour,

    Un exemple qui pourra t'aider :

    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
    clear
    x=0:0.1:100;
    y=sin(2*pi*0.01*x);
    vx=100*diff(x);
    vy=100*diff(y);
    axis([0 100 -2 2])
    figure(1)
    hold on
    for k=1:1000
        drawnow
        if mod(k,100)==0
            quiver(x(k),y(k),vx(k),vy(k),'r');
        end
        plot(x(k),y(k))
     
    end

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut Marquage de points
    Bonjour,
    Ajout du marquage de la base des vecteurs vitesses :
    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
    clear
    x=0:0.1:100;
    y=sin(2*pi*0.01*x);
    vx=100*diff(x);
    vy=100*diff(y);
    figure(1)
    axis([0 100 -2 2])
    grid
    hold on
    for k=1:1000
        drawnow
        if mod(k,100)==0
            quiver(x(k),y(k),vx(k),vy(k),'r');
            plot(x(k),y(k),'.b','MarkerSize',20)
        end
        plot(x(k),y(k))
     
    end

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 20
    Par défaut
    Bonjour,

    Merci beaucoup pour votre aide, je vais essayer de comprendre tout ca

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 20
    Par défaut
    Re-Bonjour,

    Finalement, j'ai modifie le code en celui-ci :

    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 k=257:65535
    [s1,s2,s3,s4]=s(k,Ux,X,Uy,Y);
    S=[s1 s2 ; s3 s4];
    S2=S*S;
    [o1,o2,o3,o4]=o(k,Ux,X,Uy,Y);
    O=[o1 o2 ; o3 o4];
    O2=O*O;
    M=O2+S2;
    lambda=eig(M);
    [i,j]=indgrille(k);
        if lambda(1)<0 && lambda(2)<0;
        plot(X(k),Y(k),'.r','MarkerSize',10);
        hold on;
        end
    end
    hold on;
    quiver(X,Y,Ux,Uy);
    Je ne sais pas pourquoi je n'y avais pas pense avant mais le probleme venait du fait que le "quiver" etait dans ma boucle for donc, pour chaque k, un quiver etait dessine, ce qui donnait lieu a la superposition de plus de 65000 champs de vitesse... d'ou la lenteur du programme

    Le probleme est desormais resolu et j'obtiens le marquage de tous les points qui m'interessent en une fois et presque instantanement

    Merci enormement pour votre aide !

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/11/2007, 06h35
  2. Représenter un point sur une figure
    Par berberat dans le forum MATLAB
    Réponses: 2
    Dernier message: 02/08/2007, 15h32
  3. [VB2005] Tracer un point sur une feuille(Form)
    Par Mike85 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/06/2006, 23h48
  4. Calque -> Un point sur une carte de france
    Par TATAYET dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/04/2005, 14h48

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