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

Interpolation einer Wertematrix

 

MHesseling
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2018, 19:29     Titel: Interpolation einer Wertematrix
  Antworten mit Zitat      
Hallo Matlab Community

Ich habe eine Frage zur Interpolation von Werten:

Ich habe eine Flügelkontur, die aus 201 Punkten besteht, ein Bild davon ist im Anhang.
Die Punkte sind in einer [201x2] Matrix gegeben ,die erste Spalte sind die x Werte und die zweite die dazugehörigen y Werte. Die Koordinaten geben die Punkte von ganz Rechts gegen den Uhrzeigersinn wieder (Siehe Bild) Wenn man sich das Bild ansieht merkt man, das am rechten Ende viele Punkte die Kontur beschreiben , danach werden die Abstände zwischen den Punkten Größer und wieder unten rechts angekommen werden die Abstände erneut kleiner.

Ich würde gerne eine Matrix, die nx2 Einträge hat, wobei alle Punkte genau der vorgegebenen Kontur folgen gleich weit voneinander entfernt sind. n ist dabei sozusagen neben der Kontur die Eingangsvariable:

Zusammengefasst habe ich als Eingang die Flügelkontur mit 201 Punkte und will eine Gleichmäßig verteile Flügelkontur der gleichen Form mit n Punkten.

Ich weis leider nicht genau wie ich das machen kann, da es mit den interp Funktionen nicht richtig funktioniert, zumindest bekomme ich es nicht hin Very Happy

Flügelkontur_mit_Punkten.PNG
 Beschreibung:

Download
 Dateiname:  Flügelkontur_mit_Punkten.PNG
 Dateigröße:  24.78 KB
 Heruntergeladen:  300 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.04.2018, 20:38     Titel:
  Antworten mit Zitat      
Hallo,

was gehen sollte: du fasst die Kurve als x(t), y(t) auf. Als t verwendest du die kumulierte Kurvenlänge. Dann interpolierst du für ein tgrid mit gleichmäßiger Kurvenlänge.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MHesseling
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2018, 20:47     Titel:
  Antworten mit Zitat      
Hallo Harald,
danke für deine Antwort, also bei unserem beispiel gäb es dann 400 einzelne t die immer eine länge von 1/400 *Umfang, 2/400 *Umfang......400/400 *Umfang haben , sehe ich das so richtig ? aber wie bekomme ich dann die funktionen x(t) und y(t) , das sind ja nur Werte
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.04.2018, 21:26     Titel:
  Antworten mit Zitat      
Hallo,

nein... du musst wie gesagt die kumulierte Kurvenlänge ausrechnen.
Code:
t(1) = 0;
t(2) = t(1) + sqrt( (x(2) - x(1))^2 + (y(2) - y(1))^2);
t(3) = t(2) + sqrt( (x(3) - x(2))^2 + (y(3) - y(2))^2);
% etc.

Entweder in einer for-Schleife oder mit etwas Geschick mit diff und cumsum.

Zitat:
aber wie bekomme ich dann die funktionen x(t) und y(t) , das sind ja nur Werte

Du brauchst dann doch nur zu interpolieren, und dazu brauchst du keine Funktionen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MHesseling
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2018, 13:17     Titel:
  Antworten mit Zitat      
Super vielen Dank, hat funktioniert, für alle die zukünftig das hier lesen gebe ich meine Code an

Code:

           nPointsOfCont=size(contourMiddleLine,1);
            t=zeros(nPointsOfCont,1);
            nPointsOfFinalCont= 400;

               for i=2:nPointsOfCont
                  t(i)=t(i-1)+sqrt( (contourMiddleLine(i,1)-contourMiddleLine(i-1,1))^2 ...
                                +(contourMiddleLine(i,2)-contourMiddleLine(i-1,2))^2);  
               end

            tq = 0:t(nPointsOfCont)/nPointsOfFinalCont:t(nPointsOfCont);
            xq1 = interp1(t,contourMiddleLine(:,1),tq);
            yq1 = interp1(t,contourMiddleLine(:,2),tq);
            contourMiddleLineNormLength= [xq1',yq1'];
            contourMiddleLine = contourMiddleLineNormLength;
 
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 - 2024 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.