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 :

dégradation de couleur


Sujet :

MATLAB

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 195
    Points : 101
    Points
    101
    Par défaut dégradation de couleur
    Bonjour,

    J’ai codé un petit code qui permet de tracer des cercles à différents diamètres.
    Mon objectif consiste à dégrader la couleur de la surface selon le diamètre du disque et d’afficher un color bar à coté avec la dégradation de couleur et la valeur de diamètre.
    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
    VThetaDeg = 0:1:360;
    VTheta = VThetaDeg *pi / 180;
    X_centre=1:10:150;
    Y_centre=20*ones(1,length(X_centre));
    Rmax=10;
    Rmin=3;
    Rayon=zeros(1,length(X_centre));
    x_depart=X_centre(1);
    X_fin=X_centre(end);
    for n=1:length(X_centre)
    X=X_centre(n);
    Rayon(n)=(((X-x_depart)*(Rmax-Rmin))/(X_fin-x_depart))+Rmin;
    end
     
    for k=1:length(X_centre)
    XCercle = X_centre(k) + Rayon(k) * cos(VTheta);
    YCercle = Y_centre(k) + Rayon(k) * sin(VTheta);
    fill(XCercle,YCercle,'r')
    hold on
    end
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 882
    Points
    52 882
    Par défaut
    Tu veux plutôt parler de "dégradé", non ?

    Une première idée à partir de ces données simplifiées (je présume) :

    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
    VThetaDeg = 0:1:360;
    VTheta = VThetaDeg *pi / 180;
    X_centre = 1:10:150;
    Y_centre = 20*ones(1,length(X_centre));
    Rmax = 10;
    Rmin = 3;
    Rayon = zeros(1,length(X_centre));
    x_depart = X_centre(1);
    X_fin = X_centre(end);
    for n = 1:length(X_centre)
        X=X_centre(n);
        Rayon(n) = (((X-x_depart)*(Rmax-Rmin))/(X_fin-x_depart))+Rmin;
    end
     
    [a,b,~] = unique(Rayon);
     
    cmap = hsv(max(b));
    set(gcf, 'colormap', cmap)
     
    hold on
     
    for k = 1:length(X_centre)
        XCercle = X_centre(k) + Rayon(k) * cos(VTheta);
        YCercle = Y_centre(k) + Rayon(k) * sin(VTheta);
        h = fill(XCercle, YCercle, 'r');
        set(h,'facecolor', cmap(b(k),:))
    end
    axis equal
     
    c = colorbar;
    yl = get(c, 'ylim');
    yt = linspace(yl(1), yl(2), 2*numel(a)+1);
    set(c, 'ytick', yt(2:2:end-1), 'yticklabel', num2str(a(:)))
    Donne nous des données réelles pour pouvoir te fournir une solution plus précise.
    Images attachées Images attachées  

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 195
    Points : 101
    Points
    101
    Par défaut dégradation de couleur
    Merci bien, c'est génial

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 195
    Points : 101
    Points
    101
    Par défaut dégradation de couleur
    Bonjour,
    En effet, quant j'ajoute une autre cercle avec un diamètre plus petit ou deux cercles de deux diamètres différents, elle ne donne pas le résultat souhaité.
    Merci
    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
    clear all, clc
    %%
    VThetaDeg = 0:1:360;
    VTheta = VThetaDeg *pi / 180;
    X_centre = 1:10:151;
    Y_centre = 20*ones(1,length(X_centre));
    Rmax = 10;
    Rmin = 3;
    Rayon = zeros(1,length(X_centre));
    x_depart = X_centre(1);
    X_fin = X_centre(end-1);
    for n = 1:length(X_centre)-1
        X=X_centre(n);
        Rayon(n) = (((X-x_depart)*(Rmax-Rmin))/(X_fin-x_depart))+Rmin;
    end
     Rayon(length(X_centre))=2; %Rayon ajouté 
     
     
    [a,b,~] = unique(Rayon);
     
    cmap = parula(max(b));
    set(gcf, 'colormap', cmap)
     
    hold on
     
    for k = 1:length(X_centre)
        XCercle = X_centre(k) + Rayon(k) * cos(VTheta);
        YCercle = Y_centre(k) + Rayon(k) * sin(VTheta);
        h = fill(XCercle, YCercle, 'r');
        set(h,'facecolor', cmap(b(k),:))
    end
    axis equal
     c=colorbar
    % c=colorbar; colormap(jet)
    yl = get(c, 'ylim');
    yt = linspace(yl(1), yl(2), 2*numel(a)+1);
    set(c, 'ytick', yt(2:2:end-1), 'yticklabel', num2str(a(:)))

    Je pense à cause de la fonction unique, par exemple quant je fais Rmax=Rmin=10, normalement, je trouve des cercle avec la même couleur.
    Merci pour votre aide?

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 882
    Points
    52 882
    Par défaut
    Il faut utiliser le 3ème argument de sortie de unique et non pas le 2ème :

    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
    clear all, clc
    %%
    VThetaDeg = 0:1:360;
    VTheta = VThetaDeg *pi / 180;
    X_centre = 1:10:151;
    Y_centre = 20*ones(1,length(X_centre));
    Rmax = 10;
    Rmin = 3;
    Rayon = zeros(1,length(X_centre));
    x_depart = X_centre(1);
    X_fin = X_centre(end-1);
    for n = 1:length(X_centre)-1
        X=X_centre(n);
        Rayon(n) = (((X-x_depart)*(Rmax-Rmin))/(X_fin-x_depart))+Rmin;
    end
     Rayon(length(X_centre))=2; %Rayon ajouté 
     
     
    [a,~,c] = unique(Rayon);
     
    cmap = parula(max(c));
    set(gcf, 'colormap', cmap)
     
    hold on
     
    for k = 1:length(X_centre)
        XCercle = X_centre(k) + Rayon(k) * cos(VTheta);
        YCercle = Y_centre(k) + Rayon(k) * sin(VTheta);
        h = fill(XCercle, YCercle, 'r');
        set(h,'facecolor', cmap(c(k),:))
    end
    axis equal
     c=colorbar;
    % c=colorbar; colormap(jet)
    yl = get(c, 'ylim');
    yt = linspace(yl(1), yl(2), 2*numel(a)+1);
    set(c, 'ytick', yt(2:2:end-1), 'yticklabel', num2str(a(:)))
    Images attachées Images attachées  

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 195
    Points : 101
    Points
    101
    Par défaut dégradation de couleur
    Merci pour votre réponse,
    Dans le cas ou j'ai des centaines des cercles, je ne veux pas afficher toutes les valeurs de diamètres sur le colorbar. Je veux mettre le min et le max et quelques valeurs tout au long du colorbar selon un pas déterminé. Comment je peux le faire ?
    Merci

  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 304
    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 304
    Points : 52 882
    Points
    52 882
    Par défaut
    Modifie la fin du code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    yt = linspace(yl(1), yl(2), 2*numel(a)+1);
    yt = yt(2:2:end-1);
     
    idx = [1 numel(yt)];
     
    set(c, 'ytick', yt(idx), 'yticklabel', num2str(a(idx).'))
    À toi d'adapter les valeurs dans idx selon ton besoin

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 195
    Points : 101
    Points
    101
    Par défaut
    Merci Jerome Briot,
    par contre il n'affiche pas des valeurs au milieu. je veux ajouter des valeurs au niveau des points rouge par exemple.
    Images attachées Images attachées  

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 882
    Points
    52 882
    Par défaut
    C'est bien ce que j'ai écris dans la dernière phrase de mon précédent message.

    Si tu veux un point sur deux :


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

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. Couleur d'une JComboBox disabled
    Par ced dans le forum Composants
    Réponses: 6
    Dernier message: 06/01/2004, 15h33
  3. Couleur des lignes dans DBGrid
    Par eddie dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/06/2002, 18h15
  4. Mixage de Couleurs
    Par exxos dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 29/05/2002, 13h34
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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