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

Dickenmaximum Profil

 

thomas_90
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 09.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2017, 17:48     Titel: Dickenmaximum Profil
  Antworten mit Zitat      
Hallo zusammen,

im Anhang seht ihr die xyz-Koordinaten eines Schaufel-Profilschnittes.
Ich möchte jetzt herausfinden, wo bei diesem Profilschnitt das Dickenmaximum liegt.

Heißt also ich möchte jeden x-Wert durchgehen und wenn man sich eine senkrechte an diesem x-Wert vorstellt, müsste es immer zwei Schittpunkte der Profilkontur mit dieser Senkrechten geben. Ich bräuchte also diese Schnittpunkte, müsste von den Schnittpunkten die Differenz bilden und die betragsmäßig größte Differenz wäre dann mein Dickenmaximum an der Stelle x.

Bisher habe ich es nur gebacken bekommen die Datei einzulesen Rolling Eyes
Code:
clear all;
clc;

[x,y,z]=textread('section1.txt');
plot(x,y)
 


Vielleicht kann mir ja jemand bei der Lösung des Problems helfen.
Danke schon Mal im Voraus.

Viele Grüße
Thomas

section1.txt
 Beschreibung:
Profilschnitt

Download
 Dateiname:  section1.txt
 Dateigröße:  10.43 KB
 Heruntergeladen:  261 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: 09.11.2017, 18:02     Titel:
  Antworten mit Zitat      
Hallo,

Vorschlag:

Code:
[x,y,z]=textread('section1.txt');

% Aufspalten in obere und untere Kurve
endeTeil1 = find(diff(x) < -0.1, 1);
x1 = x(1:endeTeil1);
y1 = y(1:endeTeil1);
x2 = x(endeTeil1+1:end);
y2 = y(endeTeil1+1:end);

% Interpolieren der oberen und unteren Kurve für gemeinsame x-Werte
xmin = max(min(x1), min(x2));
xmax = min(max(x1), max(x2));
xgrid = linspace(xmin, xmax, 100);
y1grid = interp1(x1, y1, xgrid);
y2grid = interp1(x2, y2, xgrid);

% Jetzt passen die y-Werte zueinander und können subtrahiert werden
[maxDiff, idx] = max(y1grid - y2grid)
xgrid(idx)
 


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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 09.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2017, 11:08     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für die Antwort und sorry für meine späte Reaktion.
Das mit dem Aufspalten verstehe ich noch nicht ganz: Du checkst ob die Differenz zweier aufeinanderfolgender x-Werte kleiner als -0,1 ist, um den oberen vom unteren Teil zu trennen. Also was der Code tut ist mir klar (obwohl ich nicht weiß was die letzte 1 bei find(diff(x) < -0.1, 1) bewirkt), aber mir fehlt irgendwie das Verständnis.
Wenn die Differenz kleiner als-0,1 ist heißt es, dass der obere Teil da endet. Warum? Embarassed

Viele Grüße
Thomas
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: 06.12.2017, 11:34     Titel:
  Antworten mit Zitat      
Hallo,

das liegt an der Organisation deiner Daten. Wenn du dir die x-Werte ansiehst, dann steigen sie zunächst an (1. Teil), fallen dann rapide ab und steigen dann wieder (2. Teil).
Code:


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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 09.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2017, 14:10     Titel:
  Antworten mit Zitat      
Ja, das macht Sinn, danke.

Mir ist aber gerade aufgefallen, dass die Berechnung des Dickenmaximums ja falsch ist. Wir berechnen oben ja zu jedem x-Wert die Differenz der beiden y-Werte zu diesem x-Wert, aber das ist ja nicht das Dickenmaximum.
Für das Dickenmaximum muss man ja den Durchmesser des größten Kreises innerhalb des Profils bestimmen (siehe Anhang) und der Mittelpunkt dieses Kreises ist dann die Position des Dickenmaximums.
Sowas kriegt man mit Matlab nicht hin oder? Crying or Very sad

Viele Grüße
Thomas

Dickenmaximum.png
 Beschreibung:

Download
 Dateiname:  Dickenmaximum.png
 Dateigröße:  23.82 KB
 Heruntergeladen:  283 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: 06.12.2017, 14:56     Titel:
  Antworten mit Zitat      
Hallo,

du bekommst mit MATLAB alles hin, was du mathematisch beschreiben kannst. Du kannst beispielsweise zu jedem oberen Punkt die minimale Distanz zu einem unteren Punkt berechnen und kommst so dem gewünschten schon sehr nahe.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 09.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2017, 14:08     Titel:
  Antworten mit Zitat      
Hi Harald,

da hast du sicher Recht. Wie wäre es mit diesem Ansatz.
Man führt den ersten Teil deines Codes aus, um die Kurve in einen oberen und unteren Teil zu teilen.

Dann erstellt man von der oberen und der unteren Kurve ganz viele Offsetkurven, so dass sich diese (wie im Anhang) schneiden. Und der größte Offset ist dann die Position der maximalen Dicke.

Könnte man so vorgehen und wenn ja, wie könnte man das in Matlab umsetzen?
Viele Grüße

Thomas

Offsetkurven.png
 Beschreibung:

Download
 Dateiname:  Offsetkurven.png
 Dateigröße:  86.91 KB
 Heruntergeladen:  271 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: 17.12.2017, 18:22     Titel:
  Antworten mit Zitat      
Hallo,

der Ansatz mit den Offsetkurven ist m.E. deutlich schwieriger umzusetzen als mein Vorschlag, da die Verschiebung ja in die "richtige" Richtung erfolgen muss. Nur, was ist die richtige Richtung?

Also:
Zitat:
zu jedem oberen Punkt die minimale Distanz zu einem unteren Punkt berechnen

und darüber dann das Maximum.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 09.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2017, 19:19     Titel:
  Antworten mit Zitat      
Ja das ist auch wahr. Nur leider gucken wir uns bei der Differenz die rote Gerade im Anhang an, allerdings interessiert mich (näherungsweise) die grüne Gerade.
Aber da ist wieder das Problem, dass ich nicht weiß, welchen Winkel diese grüne Gerade hat...
Ich plotte übrigens die z- und y-Koordinaten (plot(z,y)).

Wenn man das Profil noch irgendwie drehen könnte, dass die untere Kurve ungefähr waagerecht ist, würde das mit der Differenz funktionieren.
Vielleicht die Skizze so drehen, dass zwei Punkte vorne und hinten am Profil die gleiche Höhe (also die gleiche y-Koordinate) haben? dann wär das Profil ja annähernd gerade.

Abstand.png
 Beschreibung:

Download
 Dateiname:  Abstand.png
 Dateigröße:  14.74 KB
 Heruntergeladen:  242 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: 17.12.2017, 19:31     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Nur leider gucken wir uns bei der Differenz die rote Gerade im Anhang an, allerdings interessiert mich (näherungsweise) die grüne Gerade.

Nein, mein Vorschlag betrachtet grüne Geraden, da ja der minimale Abstand berechnet wird.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 09.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2017, 20:08     Titel:
  Antworten mit Zitat      
Ach ist das so?
Dann habe ich wohl deinen Code noch nicht verstanden Rolling Eyes Embarassed

Kannst du nochmal kurz erklären, was hier passiert, nachdem du die Kurve in einen oberen und einen unteren Teil geteilt hast?

Code:
% Interpolieren der oberen und unteren Kurve für gemeinsame x-Werte
xmin = max(min(x1), min(x2));
xmax = min(max(x1), max(x2));
xgrid = linspace(xmin, xmax, 100);
y1grid = interp1(x1, y1, xgrid);
y2grid = interp1(x2, y2, xgrid);


Danke und viele Grüße
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: 17.12.2017, 20:37     Titel:
  Antworten mit Zitat      
Hallo,

es geht um den zuletzt gemachten Vorschlag, nicht um den Code. Nochmal:
Zitat:
zu jedem oberen Punkt die minimale Distanz zu einem unteren Punkt berechnen

so bekommst du die Schichtdicke an jeder Stelle.
Zitat:
und darüber dann das Maximum.


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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 09.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2017, 21:30     Titel:
  Antworten mit Zitat      
Achso, sorry falsch verstanden.
Zitat:
zu jedem oberen Punkt die minimale Distanz zu einem unteren Punkt berechnen

Wie setze ich das denn in Matlab um?

Viele Grüße
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: 17.12.2017, 21:53     Titel:
  Antworten mit Zitat      
Hallo,

versuch's doch mal selbst.

Der Abstand zwischen zwei Punkten sollte ja machbar sein. Dann den oberen Punkt zunächst festhalten und eine Schleife über die unteren Punkte. Dann um das ganze herum noch eine Schleife über die oberen Punkte.

Idealerweise dann noch darüber nachdenken, ob sich min. eine der Schleifen vermeiden lässt.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 09.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2018, 18:36     Titel:
  Antworten mit Zitat      
Hallo Harald,

so ungefähr:
Code:
close all
clear all
clc

[x,y,z]=textread('section1.txt');

% Aufspalten in obere und untere Kurve
endeTeil1 = find(diff(x) < -0.1, 1);
x1 = x(1:endeTeil1);
y1 = y(1:endeTeil1);
x2 = x(endeTeil1+1:end);
y2 = y(endeTeil1+1:end);


for k=1:numel(x1)
    for l=2:numel(x2)
        distance(k,l) = sqrt(( x1(k) - x2(l) ) ^2 + ( y(k) - y(l) )^2 );
    end
end
?

Aber ich bin der Meinung den Abstand so zu bilden, ist noch immer nicht das was ich suche. Ich suche ja den maximalen Abstand, und da wird er mir bei meinem Code natürlich den Abstand von dem Punkt ganz vorne zum Punkt ganz hinten ausgeben. Aber das ist ja dann nicht das gesuchte Dickenmaximum.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.