Verfasst am: 11.02.2013, 18:37
Titel: Surface-Plots mit konkavem Meshgrid
Hallo zusammen!
Ich möchte einen 3D-Plot erstellen, wobei das Gitter projiziert auf die x-y-Ebene konkav ist.
Mit TriScatteredInterp, griddata und surface erhalte ich immer abgeschnittene und rechteckige Plots, wo man nicht alle Punkte sehen kann.
Der beste Code den ich hinbekommen habe ist der Folgende mit delaunay:
Code:
% X,Y,Z sind Spaltenvektoren mit den x,y,z-Koordinaten
tri = delaunay(X,Y);
trisurf(tri,X,Y,Z);
trimesh(tri, X, Y, Z, 'FaceAlpha', 0, 'EdgeColor', 'black');
Allerdings werden hier die konkaven Stellen ausgefüllt. Das möchte ich aber nicht.
Wie gehe ich am besten vor? Gibt es einen einfachen Befehl, den ich übersehen habe? Ich suche schon seit Tagen.
Danke schon mal für eure Ideen.
Wiesokannichdochmatlab
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 11.02.2013, 19:55
Titel:
Nachdem ich den Beitrag erstellt hatte, hatte ich einen Geistesblitz.
Habe gesehen, dass delaunay eine recht komplexe Funktion ist, die ich gar nicht brauche. Habe selber den Parameter tri mittels einer Funktion zusammengestellt.
Falls irgendwer, irgendwann das gleiche Problem haben sollte, hier noch meine Funktion:
Code:
function tri = getTri(m,n) % Gibt den Parameter tri für trimesh und trisurf Plots zurück. % m und n sind dabei die Anzahl Punkte in x- und y-Richtung.
% Globale Knotennummern in der Matrix a speichern
a = zeros(m,n);
c = 1; % Counter for i = 1:m
for j = 1:n
a(i,j) = c;
c = c+1;
end%for j
end%for i
% Tri beinhaltet in jeder Zeile drei Knotennummern, die miteinander % verbunden werden sollen.
c = 1; % Counter
tri = zeros((m-1)*(n-1)*2 ,3);
for i = 1:(m-1) for j = 1:(n-1)
tri(c,1) = a(i,j);
tri(c,2) = a(i+1,j+1);
tri(c,3) = a(i+1,j);
c = c+1;
tri(c,1) = a(i,j);
tri(c,2) = a(i,j+1);
tri(c,3) = a(i+1,j+1);
c = c+1;
end%for j
end%for i
Verfasst am: 15.08.2014, 16:41
Titel: Wie ist deine Funktion anzuwenden?
Hallo wiesokannichdochmatlab
Wie genau ist getTri anzuwenden? Müssen [n,m] speziell gewählt werden? Wie kann getTri ohne die Vektoren x und y auskommen?
Bei einer blinden Anwendung von getTri(n,m) und triplot(tri,x,y,z,c) bekomme ich
Warning: Values in patch Faces must be in [1 : rows(Vertices)] - not
rendering
ich nehme an folgendes muss erfüllt sein
n*m=length(x)
Was wenn length(x) keine guten Teiler hat?
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.