WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Farbe aus Colormap auslesen?

 

Joa
Forum-Century

Forum-Century


Beiträge: 133
Anmeldedatum: 19.05.09
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 13.07.2010, 13:30     Titel: Farbe aus Colormap auslesen?
  Antworten mit Zitat      
Hallo,
ich hab mal wieder eine Frage:
Ich habe mir eine Colormap selbst über Werte definiert, jetzt möchte ich die Farbe zu einem bestimmten Wert auselsen, ist das irgendwie möglich und wenn ja wie?

Danke schonmal!

LG
Joa
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.07.2010, 22:41     Titel:
  Antworten mit Zitat      
Hallo Joa,

in welcher Form liegt denn Deine definierte Colormap vor?
Wenn Du sie wie üblich als [M x 3] Matrix definiert hast, sollte das Auslesen der Farbe über den Index eigentlich einfach sein.

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Joa
Themenstarter

Forum-Century

Forum-Century


Beiträge: 133
Anmeldedatum: 19.05.09
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 16.07.2010, 08:49     Titel:
  Antworten mit Zitat      
Hey,
mein Code mit dem ich mir meine Colormap erstellt habe sieht so aus:

Code:

%%  Patch darstellen
    p = patch('faces',t, 'vertices',v);
    set(p, 'facec', 'b');             % Set the face color
    set(p, 'facec', 'interp');        % Set the face color flat
    set(p, 'FaceVertexCData',c);      % Set the color
    set(p, 'facealpha', 1)            % Use for transparency
    set(p, 'EdgeColor', 'none');      % Set the edge color
    set(p, 'FaceLighting', 'phong');
 
    %%  Ansicht definieren
    %Achsen
    xlabel('X in mm'), ylabel('Y in mm'), zlabel('Z in mm');
    grid off;
    axis off;

    %Colorbar definieren
    cmap = colormap(hot);
    cmapTmp = zeros(size(cmap));
    for i = 1:length(cmap)
        cmapTmp(i,:) = cmap(length(cmap)+1-i,:);
    end
    colormap(cmapTmp);
    colorbar;
 


Wie genau kann ich dann die Werte die ich brauche auslesen?

LG Joa
Private Nachricht senden Benutzer-Profile anzeigen
 
Joa
Themenstarter

Forum-Century

Forum-Century


Beiträge: 133
Anmeldedatum: 19.05.09
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 16.07.2010, 15:00     Titel:
  Antworten mit Zitat      
Ich hab das Problem jetzt gelöst, zwar wahrscheinlich sehr umständlich, aber funktionieren tut es einwandfrei!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.07.2010, 15:15     Titel:
  Antworten mit Zitat      
Hallo Joa,

Code:

    cmap = colormap(hot);
    cmapTmp = zeros(size(cmap));
    for i = 1:length(cmap)
        cmapTmp(i,:) = cmap(length(cmap)+1-i,:);
    end
    colormap(cmapTmp);
 


Einfacher:
Code:

    cmap = hot;
    cmap = cmap(size(cmap, 1):-1:1, :);
    colormap(cmap)
 


Zitat:
Wie genau kann ich dann die Werte die ich brauche auslesen?

Das läßt sich immer noch nicht beantworten, da Du nicht schreibst, welche Werte Du brauchst.
Wenn Du die dritte Farbe brauchst, ist das natürlich "cmap(3, :)". Falls Du etwas anderes brauchst, müsstest Du das zunächst genauer beschreiben.

Du erwähnst, dass Du eine komplizierte Lösung gefunden hast - wenn Du sie auch posted würdest, könnte man sie eventuell vereinfachen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Joa
Themenstarter

Forum-Century

Forum-Century


Beiträge: 133
Anmeldedatum: 19.05.09
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 19.07.2010, 11:39     Titel:
  Antworten mit Zitat      
So, ich habe es wie folgt gelöst:

der Teil des Codes nachdem ihc mir meine Colormap und meine Colorbar definiert habe:
Code:

colorm=colormap;
   
    varcax=caxis;
   
    differ=varcax(2)-varcax(1);
   
    szcolorm=size(colorm,1);
   
    step=differ/szcolorm;
   
    clcolor=zeros(size(szcolorm+1,1));
   
    clcolor(1)=varcax(1);
   
    for i=2:szcolorm+1
        clcolor(i)=varcax(1)+(i-1)*step;
    end

    colorm(szcolorm+1,:)=0;
   
    colcolor=[clcolor',colorm(:,1),colorm(:,2),colorm(:,3)];    
 


Das übergebe ich dann weiter und vergleiche dann hiermit:

Code:

    col1=colcolor(:,1);
   
    for i=1:size(col1,1)-1
        A=col1(i);
        B=col1(i+1);
        if U>=A && U<=B
            checkcol=i;
            break;
        else
            if i==1 && U<A
            checkcol=1;
            end
            if i==size(col1,1)-1 && U>B
                checkcol=size(col1,1)-1;
            end
        end
    end
   
    if isempty(colcolor)==1
        farbe='blue';
    else
        farbe=[colcolor(checkcol,2),colcolor(checkcol,3),colcolor(checkcol,4)];
    end
 


Mein U mit den Werten die ich vorher in der Colorbar definiert habe. Und siehe da es funktioniert Smile

LG Joa
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.07.2010, 13:11     Titel:
  Antworten mit Zitat      
Hallo Joa,

Wenn's läuft: prima.

Der Befehl INTERP1 mit dem 'nearest' flag kann ebenfalls einen passende Index finden.

Dies läßt sich noch vereinfachen:
Code:
step = differ / szcolorm;
    clcolor = zeros(size(szcolorm+1,1));
    clcolor(1)=varcax(1);
    for i = 2:szcolorm+1
        clcolor(i) = varcax(1)+(i-1)*step;
    end

z.B.:
Code:
clcolor = varcax(1) + (0:szcolnomr + 1) * differ / szcolorm;

Kennst Du den "A:Step:B" Operator und LINSPACE?

Code:
farbe=[colcolor(checkcol,2),colcolor(checkcol,3),colcolor(checkcol,4)];
läßt sich kürzer und klarer formulieren:
Code:
farbe = colcolor(checkcol,2:4);


Das schöne und effiziente and "Mat"lab ist, dass es ideal für die Bearbeitung von "Mat"rizen ist. Zwar kann es natürlich auch mit Skalaren rechnen, aber die ganze Power geht verloren.

Viele Grüße, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.