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

3D-Plot 1/2-Zylinder mit Temperaturfeld auf Oberfläche

 

RNA
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 12.03.14
Wohnort: München
Version: ---
     Beitrag Verfasst am: 12.03.2014, 11:58     Titel: 3D-Plot 1/2-Zylinder mit Temperaturfeld auf Oberfläche
  Antworten mit Zitat      
Hallo!

Ich bin relativ unerfahren im Umgang mit MATLAB und habe folgendes Problem (zu dem eine ausführliche Hilfe-/Google-/Forumssuche noch keine Ergebnisse gebracht hat):

Ich möchte einen 3D-Plot eines Halbzylinders erstellen, auf dessen Oberfläche ein Temperaturfeld farblich dargestellt wird. So ähnlich wie auf dem Bild, allerdings eben in MATLAB, und nicht in ANSYS.

Ich habe aus vorher berechneten Daten eine Matrix erstellt, 'Daten' <5016x4 double>, die in der 1. Spalte die x-Koordinaten hat, in der 2. die y-Koordinaten, in der 3. die z-Koordinaten hat, und schließlich in der 4. die Temperaturen. (siehe .mat-File)

Probiert habe ich z.B. fogendes:
Code:
surf(Daten(:, 1), Daten(:, 2), Daten(:, 3))

oder auch:
Code:
[X, Y, Z] = meshgrid(Daten(:, 1), Daten(:, 2), Daten(:, 3))


Jedoch ohne Erfolg. Habt ihr vorschläge?
Vielen Dank!

20140311.mat.zip
 Beschreibung:

Download
 Dateiname:  20140311.mat.zip
 Dateigröße:  37.2 KB
 Heruntergeladen:  491 mal
LB_Temperaturprofil.png
 Beschreibung:

Download
 Dateiname:  LB_Temperaturprofil.png
 Dateigröße:  66.49 KB
 Heruntergeladen:  586 mal
Private Nachricht senden Benutzer-Profile anzeigen


Raketenmaid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 28.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2014, 18:11     Titel:
  Antworten mit Zitat      
Ich hatte ein ähnliches Problem vor kurzem. Habe hier aber leider keine Antwort bekommen (ist wohl etwas zu speziell). Ich habe jetzt das so für mich gelöst, dass ich die einzufärbende Oberfläche als Patch definiert habe und dabei die Oberfläche in einzelne Faces zerlegt habe (siehe hierzu Matlab-Hilfe zu dem Befehl patch). Da ich wusste, in welcher Richtung mein Farbgradient verlaufen wird, war das recht einfach. Sofern bei Dir der Gradient auch bekannt ist, kannst Du es ähnlich machen.

Jedes Face bekommt dabei eine Farbe zugewiesen, je nachdem wie "heiß" sie ist.

Es bietet sich für Dein Problem an, Deinen Zylinder mit einem Netz zu überziehen, allerdings wird es u. U. ziemlich grob sein, wenn Du es nicht zu engmaschig ziehen möchtest. Einen so glatten Verlauf wie im Bild von Ansys bekommt Du so wohl auch eher nicht hin.

Mal einen Code-Fetzen hinskizziert (müsstest Du auf Deinen Fall noch anpassen):

Code:

MIN=min(temperatur(:,1));
MAX=max(temperatur(:,1));
level=(MAX-MIN)/nlevel; %nlevel: Anzahl der Farbstufen

map = jet(nlevel); %in map kommt der RGB-Code der jet-Colormap mit nlevel Stufen

for i=1:size(temperature,1),
    for j = 1:nlevel
        if temperature(i) >= MIN + (j-1)*level && temperature(i) < MIN + j*level
            col_mat(i,1:3) = map(j,1:3); %col_map weist je nach Tempartur eine Farbe zu
        end
    end
end

%--------------------------------------------
%Definition der Vertices (Gitternetzpunkte) und faces: DAS MUSST DU FÜR DEINEN ZYLINDER PASSEND MACHEN

vertices = [Koordinaten Gitternetzpunkte];

for i = 1:nv-1
    faces(i,1) = i;
    faces(i,2) = i+1;
    faces(i,3) = i+nv+1;
    faces(i,4) = i+nv;
end
%----------------------------------------------

figure()

hold all

p = patch('Vertices',vertices,'Faces',faces,'FaceColor','b');
set (p,'FaceColor','flat','FaceVertexCData',col_mat,'EdgeColor','none','FaceAlpha',0.8) %setting display options for "heat map"
caxis([MIN,MAX]);
colormap(map)
colorbar

hold off
 
Private Nachricht senden Benutzer-Profile anzeigen
 
florian_gl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2015, 13:55     Titel: Erklärung
  Antworten mit Zitat      
Hallo! kann mir jemand den matlab code erklären? ich habe ein ähnliches problem und denke, das der code das problem schon irgendwie richtig anpackt. es wäre schön, wenn mir jemand die einzelnen zeilen kommentieren könnte...

danke!
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.06.2015, 13:47     Titel: Re: Erklärung
  Antworten mit Zitat      
Hallo florian_gl

Code:
MIN=min(temperatur(:,1));

Es wäre nicht sinnvoll nun jedes einzelne Details dieser Zeile zu erklären. Der Operator "=" ist ja wahrscheinlich bekannt. Und was das abschließende Semicolon macht wahrscheinlich auch. Man könnte sich aber alleine schon über diese Zeile den Mund fusselig reden, z.B. erklären, dass der Colon-Operator : sogar in Quotes geschrieben werden kann, weil das intern das gleiche macht: temperatur(':', 1) .

Kannst Du eine konkrete Frage zum Code stellen?

Ein neuer Thread für eine neue Frage wäre auch sinnvoll.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 23.07.2015, 15:51     Titel:
  Antworten mit Zitat      
Generell klingt das wie ein Problem für
Code:
...
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
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.