kann meinen obigen Code nicht mehr ändern, hab aber festgestellt, dass ich schonmal ein ähnliches Probem hatte und griddata zur Umforumung zu X, Y, Z hilfreich war...
http://www.gomatlab.de/matrix-extrapolieren-t8338.html _________________
Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
also unter "jede Punktewolke" meine ich genau das, was unter untitled.jpg gezeigt wird. Und die eigentliche Berechnung sollte möglichst ohne Schleife gehen. Den Schritt davor, von Plot3->x,y,z ein Mesh->X,Y,Z zu machen habe ich leider nicht ohne Schleife geschafft. Nur verstehe ich nicht was du mit dem Radius-Ansatz genau meinst...
Mit meiner bisherigen Lösung kann ich im ersten Schritt ein Mesh erstellen, das klappt (Siehe untitled2.jpg: 1. und 2. Plot jeweils die Pkt-Wolke, 3. Plot ist das Mesh, voll besetzt auch mit Nullen, 4. Plot ohne die Nullen). Aber wo wandle ich die Meshgrid zu Zeilenvektoren um?
Wie ich e und f berechne schreibe ich gerne hier, aber dafür muss ich erst einen Kollegen um Erlaubnis bitten.
Bzgl. griddata:
Funktioniert ganz gut, ist aber tatzächlich langsamer:
tic
%Schritt 2: Fülle die Z-Matrix durch zeilen/spaltenweisen Vergleich
Z=zeros(size(X)); %Pre-Allo
%http://www.gomatlab.de/viewtopic,p,110463.html#110463
aX = X(1, :); %X(1,:) reicht, weil die Spalteneinträge alle gleich sind;
aY = Y(:, 1); %Y(:,1) reicht, weil die Zeileneinträge alle gleich sind;
%Schneide die zu großgeratene Matrix Z (Ist durch die Schleife oben immer eine Square-Matrix, dies ist aber nicht nötig)
Z(~any(Z,2),:)=[];
Z(:,~any(Z))=[]; Z=Z';
toc
oh, na dann ist dein Ansatz allemal vorzuziehen und die Arbeit Wert gewesen!
Rein aus Neugier: Z ist aber mit Ztest identisch, oder?
Die Idee e und f zu nehmen ist besser/schneller wie mein Ansatz. Ich weiss auch ungefähr wie man rankommt. Also wenn du den nicht so recht zeigen magst/darfst, macht mir das nix
Tipp1: Wenn die Berechnung immer noch zu langsam ist, dünne einfach in x oder y (das was größer digitalisiert ist) aus.
Tipp2: Sollte es nur um den Vergleich der Oberflächen gehen oder der extakte Wert irgendwann am Ende nötig sein, verzichte auf das sqrt.
_________________
Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
% Schneide die zu großgeratene Matrix Z (Ist durch die Schleife oben immer % eine Square-Matrix, dies ist aber nicht nötig)
Z(~any(Z,2),:)=[];
Z(:,~any(Z))=[];
Z=Z';
% Aufstellen der Indicies, verkürzt die jeweilige Matrix
indx=1:length(Z(:,1))-1;
indy=1:length(Z(1,:))-1;
% Berechnung der Diagonalenlängen |e| und |f|
e = sqrt(... (X(indx,indy) - X(indx+1,indy+1)).^2+... (Y(indx,indy) - Y(indx+1,indy+1)).^2+... (Z(indx,indy) - Z(indx+1,indy+1)).^2);
% 1) Berechnung des näherungsweisen Flächeninhalt einzelner Zellen % A = 1/2 * [ |e|^2+|f|^2 - (e * f)^2 ]
CutCellArea = 0.5*sqrt(e.^2.*f.^2-(SkProd).^2);
% Bisher werden die 0er-Einträge als Fläche mitberechnet! Dies ist % nicht korrekt. Aus diesem Grund findet ein Vergleich mit Z statt und alle % Werte aus CutCellArea werden entfernt, wenn Z = 0 ist.
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.