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 :

Ajouter une échelle d'intensité à des vecteurs vents


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut Ajouter une échelle d'intensité à des vecteurs vents
    Bonjour à tous.

    J'ai fait un programme qui me permet de tracer la direction des vents sur le golfe de gascogne (fonction quiver).

    Le vecteur vent est tracé à partir de la longitude, de la latitude, de la vitesse zonale du vent (u) et de la vitesse meridionnale du vent(v).
    En fonction de u et de v cela me permet d'avoir la direction du vent.
    Je souhaiterais :
    1) pouvoir redimentionner les fleche pour qu'elles aient toutes la même taille (en gardant l'angle de base qui correspond à la direction du vent)
    2) Je dispose également dans mes données de base de l'intensité du vent. Est t'il possible de mettre un code couleur sur mes fleches en fonction de cette intensité ?

    merci d'avance

  2. #2
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Je pense que ce code répond à tes questions:
    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
    x = rand(5,1);
    y = rand(5,1);
    u = rand(5,1);
    v = rand(5,1);
     
    cmaplength = 10;
     
    cmap  = hsv(cmaplength);
    newplot;
    hold on;
    h = zeros(1,length(x));
    distances = zeros(1,length(x));
    for i=1:length(x);
     h(i) = quiver(x(i),y(i),u(i),v(i));
     distances(i) = norm([u(i), v(i)]);
    end
    hold off;
     
    scaled_dist = 1+round(distances./max(distances(:)).*(cmaplength-1));
     
    for i=1:length(x);
        set(h(i),'Color',cmap(scaled_dist(i),:));
    end
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    merci pour ta réponse,

    Je suis désolé mais je ne comprend pas à quoi sert ce code...je suppose qu'il doit redimensionner mes fleche, mais quand je le lance je n'obtient qu'un graph type x=y...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Non, ce code se préoccupe plus de la gestion de la couleur.

    Pour en comprendre l'idée, regarde cet autre exemple qui donne une couleur différente par objet Line : Comment associer une couleur unique à chaque courbe tracée ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Je ne suis pas sure de comprendre...

    Ce que je cherche, c'est gerer ma couleur en fonction d'une intensité de vent et je ne voit pas dans le programme de tug83 une nouvelle variable qui prenne en compte cette intensité...

    Je dois passer à coté de quelque chose...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Finalement j'ai changé d'idée et je fais quelque chose de plus simple en superposant aux vecteurs vitesses une colormap correspondant aux intensité du vent.
    J'ai pour cela fais un meshgrid puis un grid data de mes latitude, longitude et intensité (puis colormap). Mon problème maintenant est que les intensités correspondant aux première longitude et latitudes contenues dans ma base de donnée ne s'affichent pas.... (et c'est sur la plupart de ces points que je bosse...)
    Images attachées Images attachées  

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Voici la solution la plus flexible (j'ai essayé de commenter au maximum) :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    % Données aléatoire
    n=25;
     
    x = rand(n,1);
    y = rand(n,1);
    u = rand(n,1);
    v = rand(n,1);
     
    % Ouverture de l'objet Figure
    figure
    % Choix d'une palette de couleur
    cmap=jet(64);
    colormap(cmap);
     
    % Tracé du graphique Quiver standard
    subplot(1,2,1)
    quiver(x,y,u,v)
    axis equal
     
    % Mise à la même longueur de toutes les vecteurs par normalization
    % Le facteur f sert à adapter la longueur à l'affichage L = f * 1
    f=.2;
    nrm=sqrt(u.^2+v.^2);
    u=f*u./nrm;
    v=f*v./nrm;
     
    % Création des objets de type Patch (méthode Vertices & Faces)
    % fv.vertices : matrice des coordonnées des sommets des vecteurs
    %   [X(1er sommet 1er vecteur) Y(1er sommet 1er vecteur)]
    %   [X(2nd sommet 1er vecteur) Y(2nd sommet 1er vecteur)]
    %   [X(1er sommet 2nd vecteur) Y(1er sommet 2nd vecteur)]
    %   [X(2nd sommet 2nd vecteur) Y(2nd sommet 2nd vecteur)]
    %   [X(1er sommet 3ème vecteur) Y(1er sommet 3ème vecteur)]
    %   [X(2nd sommet 3ème vecteur) Y(2nd sommet 3ème vecteur)]
    %   ...
    % fv.faces : matrice de connection des sommets pour former les Patch
    % [1 3 5 7  9 11 13 ...]
    % [2 4 6 8 10 12 14 ...]
     
    x=[x(:) x(:)+u(:)].';
    y=[y(:) y(:)+v(:)].';
     
    fv.vertices=[x(:) y(:)];
    fv.faces=[1:2:numel(x) ; 2:2:numel(x)].';
     
    % fv.facevertexcdata : matrice des couleurs associées à chaque sommet
    % Ici on utilise les couleurs Indexed. La couleur est un indice qui se
    % réfère à la palette de couleur créée au début du code 
    % On passe de nrm [nrm_mini nrm_maxi] à idx [1 size(cmap,1)]
     
    idx=[1+round((nrm(:)-min(nrm(:)))./max((nrm(:)-min(nrm(:)))).*(size(cmap,1)-1)) 1+round((nrm(:)-min(nrm(:)))./max((nrm(:)-min(nrm(:)))).*(size(cmap,1)-1))].';
    fv.facevertexcdata=idx(:);
     
    % Ici c'est la couleur des arêtes qui nous importe
    fv.edgecolor='interp';
     
    % Tracé du graphique avec les Patch
    subplot(1,2,2)
    patch(fv)
    axis equal
    Les objets Patch sont très puissants et leur maitrise est essentielle.
    Le code utilise l'indexage linéaire de manière intensive.

    Seul bémol, on a bien des vecteurs de même longueur, dans la bonne direction et discriminé par une couleur associé à leur norme, mais aucune info sur le sens. Pour remédier à ceci, il serait peut être possible d'ajouter un simple marqueur (avec PLOT) à l'une des deux extrémités.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Une autre piste : quiverc
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. [WD19] Ajouter une procédure à l'ensemble des champs de saisie
    Par neptunia dans le forum WinDev
    Réponses: 4
    Dernier message: 11/06/2014, 13h36
  2. [Débutant] Projet asp sur VisualStudio - Ajouter une condition en fonction des valeurs d'une colone
    Par yetman333 dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 01/04/2014, 10h05
  3. Combobox Ajouter une valeur a partir des choix
    Par bullrot dans le forum C++Builder
    Réponses: 3
    Dernier message: 23/11/2007, 19h31
  4. Afficher une échelle temporelle sur des graphiques
    Par RKOCOCO dans le forum MATLAB
    Réponses: 2
    Dernier message: 27/07/2007, 14h47
  5. Attribuer une signature +1/-1 à des vecteurs
    Par ecinaj dans le forum Fortran
    Réponses: 1
    Dernier message: 13/12/2006, 09h08

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