Verfasst am: 12.03.2014, 11:58
Titel: 3D-Plot 1/2-Zylinder mit Temperaturfeld auf Oberfläche
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)
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
%----------------------------------------------
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...
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.
Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Einstellungen und Berechtigungen
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
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.