Hi Leute,
seit einigen WOCHEN folgendes Problem. Von einem Strömungsmodell genauer gesagt handelt es sich hierbei um eine Welle in 2D (wie am Strand). Aus dem Modell habe ich drei Vektoren, also die (x,z) Koordinaten und die dazugehörige Geschwindigkeit (vel_in_x). ausgelesen. Insgesamt sind es über 270.000 Datenpunke. Nun gut scatter(x,z,wert,vel_in_x) hilft mir schon mal die Daten zu sichten. Nun soll/will ich die Daten in Form eines interpolierten conturf plotes präsentieren.
Nun leider gibt es beim interpolieren der Punktdaten mit griddata erhebliche Probleme and den Randbereichen da es sich bei der Welle. Wie ich nach längerem Recherchieren herausgefunden habe um eine konkave Hülle oder auch um eine alpha-shape handeln muss. Deshalb kommt es in den Randbereichen in denen die Welle bricht zu falschen interpolierten Werten. Nun will ich diese Stellen wegschneiden. Jetzt hatte ich die Idee mit convhull die Umhüllende/polygon der Punktdaten meiner Welle zu ermitteln und die falschen Werte wegzuschneiden. Dies funktioniert auch aber die Umhüllende ist zu ungenau und lässt immer noch falsche Interpolierungswerte übrig. Mit hullfit, gibt es im FEX, funktioniert das ganze etwas besser aber ist noch nicht ideal. Die beste Funktion ist wäre ASHAPE da sie eine sehr präzise umhüllende bildet. Nur dummerweise habe ich es noch nicht geschafft die Indizes auf meine Daten anzuwenden, da ashape die Inputdaten irgendwie umschriebt
Hier ist erstmal mein Code:
Code:
clearall % ausgelesene werte (sind meine readings sind zu gro? also rand)
x= rand(1000); % x werte
z= rand(1000); % z werte
vel_in_x = rand(1000);% und Geschwindigkeiten hold on
plot(x(k), z(k)) plot(x, z,'+') scatter(x,z,1,vel_in_x) hold off
%-----------------------
%entwerder
k=convhull(x,z)% "Umhüllung" der Welle(Punkdaten) durch das Polygon viel zu ungnau
%oder
%k=hullfit(testx,testz,0.01); % "Umhüllung" der Welle(Punkdaten)durch das Polygon besser aber immer noch zu ungenau; habe ich im FEX gefunden
%oder
%p = ASHAPE(x,y,0.1)% Umhüllung" der Welle(Punkdaten)perfeckt --> aber ich
%schaffe es nicht die Indizes auf meine Daten anzuwenden
%-----------------------
xi=min(x):0.5:max(x); % Gitterabstände
yi=min(z):0.5:max(z); % Gitterabstände
zi=griddata(x,z,vel_in_x,xi,yi'); % Interpoliert alle Punktdaten [xx,yy]=meshgrid(xi,yi); % aufbauen des Grids
in=inpolygon(xx,yy,x(k),z(k)); %Polygon auf das der Datesatz zugeschnutten werden soll
zi(~in)=NaN; % bereiche auserhalb des Polygons werden NaN gesetzt
Nun gut es ware wirkich ganz toll wenn ihr irgendelche Ideen hättet (ich nahe der Verzweiflung) wie ich meine Daten von den falschinterpolierten Werten befreie oder wie ich die Indizes für die Inputdaten für x(k) z(k) aus ashape herausbekomme
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.