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

Berechnete RGB-Werte

 

matlabel
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 76
Anmeldedatum: 28.01.16
Wohnort: ---
Version: 2020a
     Beitrag Verfasst am: 08.04.2024, 09:21     Titel: Berechnete RGB-Werte
  Antworten mit Zitat      
Ich habe 3D-Punkte auf einer Kugeloberfläche, wahlweise als (theta,phi,r) im Bodenmaß oder als (X,Y,Z) im Gradmaß.
Zu jedem dieser Punkte berechne ich einen Funktionswert f(theta,phi,r).

Nun sollen mit scatter3 die Punkte entsprechend dem jeweiligen Funktionswert von f farbig gefüllt werden.
Der Aufruf von scatter3 sieht dann so aus:
Code:

C=repmat(X,numel(X),1);
c=C(:);
scatter3(app.UIAxes,X,Y,Z,20,c,'filled');
 



Wie rechnet man die Funktionswerte f in RGB-Werte in C um, wenn als Ziel auch ein Colorbar erscheinen soll?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.458
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.04.2024, 09:36     Titel:
  Antworten mit Zitat      
Hallo,

ich hätte gesagt, das passiert automatisch basierend auf der voreingestellten bzw. gewählten colormap.
c muss allerdings dieselbe Anzahl Elemente enthalten wie die Datenvariablen. Das scheint mir hier nicht der Fall zu sein.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 76
Anmeldedatum: 28.01.16
Wohnort: ---
Version: 2020a
     Beitrag Verfasst am: 08.04.2024, 14:13     Titel: re RGB
  Antworten mit Zitat      
Danke Harald, genau das mit der Dimension ist offenbar mein Problem. Ich erzeuge X und Y mit sphere(). Diese Werte rechne ich dann mit cart2sph() in theta,phi und r um.
Dazu berechne ich f(theta,phi).
Dann erhalte ich für die Dimensionen von X bzw. theta und f: 21x21.

Für einen Aufruf wie

Zitat:

scatter3(app.UIAxes3,X,Y,Z,[],'filled','ColorVariable',f);


erhalte ich zwar keine Fehlermeldung sondern irgendwelche bunten Punkte, die mit f aber nichts zu tun haben. Und der Colorbar zeigt das Intervall von -10 bis 10 an, was auch nicht zu den Werten von f passt.

Noch 'ne Idee?


Leider weis ich da nicht weiter.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.458
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.04.2024, 14:26     Titel:
  Antworten mit Zitat      
Hallo,

Folgendes sollte funktionieren:
Code:
scatter3(X(:),Y(:),Z(:),20,c(:),'filled');


Falls nicht, bitte möglichst ein reproduzierbares Beispiel zur Verfügung stellen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 76
Anmeldedatum: 28.01.16
Wohnort: ---
Version: 2020a
     Beitrag Verfasst am: 08.04.2024, 18:38     Titel: Gewünschtes Beispiel
  Antworten mit Zitat      
Hier das gewünschte Beispiel, das ich aus meiner sehr umfangreichen App kopiert und etwas vereinfacht habe, weil die Oberfläche nicht einbezogen ist. Es muss lediglich noch app.UIAxes3 geändert werden.
Die Konstanten c1,c2,c3,dx werden bei mir aus dem GUI übernommen, weil sie änderbar sein sollen. Daher müssen sie in die Funktionsdef. einbezogen werden. Die Funktionsdef. spielt eigentlich zum Laufen der App eigentlich keine Rolle.
Code:

%Kugel zur Orientierung zeichnen
                    [X,Y,Z] = sphere;
                    r=10;
                    X=X*r; Y=Y*r; Z=Z*r;
                    %Kugel zeichnen
                    surf(app.UIAxes3,X,Y,Z,'FaceAlpha',0);
                    x=2;
                    c1=40; c2=1; c3=200;
                   
                    % in Kugelkoordinaten; theta,phi in RAD
                    [theta,phi,r] = cart2sph(X,Y,Z);                  
                    %Dabei ist phi der Elevationswinkel
                    phi=pi/2-phi; % Umrechnung in üblichen Winkel
                    hold(app.UIAxes3,'on');
                    axis(app.UIAxes3,'equal');
                    dx=r^x; % Für eine Kugel mit festem Radius immer gleich
                   
                    FormStr="@(theta,phi,c1,c2,c3,dx)";
                    FormStr=strcat(FormStr,"exp(-abs(rad2deg(theta)/c1))");
                    FormStr=strcat(FormStr,"*(cos(c2*theta).^2).");
                    FormStr=strcat(FormStr,"*exp(-abs(rad2deg(phi)/c3))./dx");
                    fh=str2func(FormStr);
                    f=fh(theta,phi,c1,c2,c3,dx)
                    C=repmat(X,numel(X),1);
                    c=C(:);
                   
                    scatter3(app.UIAxes3,X(:),Y(:),Z(:),20,c(:),'filled');      
 


So kann scatter3 nicht aufgerufen werden, weil die Funktionswerte f nicht auftauchen. Vielleicht muss man sie irgendwie in C einbinden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.458
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.04.2024, 15:17     Titel:
  Antworten mit Zitat      
Hallo,

du kannst f direkt verwenden:
Code:
scatter3(app.UIAxes3,X(:),Y(:),Z(:),20,f(:),'filled');  

Dadurch, dass du zuvor einen surf-Plot mit einem größeren Wertebereich gemacht hast, wird durch den scatter-Plot zunächst nicht der Farbbereich ausgeschöpft. Das kann man aber anpassen, z.B.
Code:
clim([min(f(:)), max(f(:))])


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 76
Anmeldedatum: 28.01.16
Wohnort: ---
Version: 2020a
     Beitrag Verfasst am: 11.04.2024, 11:32     Titel: gelöst
  Antworten mit Zitat      
Vielen Dank, Harald. Genau das war das Gewünschte. Auf das Problem ohne clim() wäre ich nie gekommen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.458
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.04.2024, 13:40     Titel:
  Antworten mit Zitat      
Hallo,

ich war auch erstmal erstaunt. ;) Um zu merken, dass es daran liegt, musste ich auch erst wissen, dass da noch ein anderes Graphik-Objekt im selben Koordinatensystem liegt.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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 - 2024 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.