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

"Hüllkurve" für beliebige geometrische Konturen

 

Christian__85
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 06.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2017, 13:04     Titel: "Hüllkurve" für beliebige geometrische Konturen
  Antworten mit Zitat      
Hallo zusammen, ich bin der Christian!

Ich habe mich soeben in diesem Forum angemeldet, da ich durch reines googlen im Web einfach nicht mehr weiterkomme. Ich hänge nun schon seit 2 Wochen an diesem Problem und hoffe hier endlich auf eine Lösung zu kommen.

Worum gehts?

Ich habe im Rahmen eines Scriptes viele verschiedene geometrische Konturen.
Ziel ist es jetzt, für jeden Punkt auf einer Kontur einen neuen Punkt zu finden, der genau im 90° Winkel mit dem Abstand r liegt.
Hier mal eine Skizze wie es später aussehen soll:
-> Anhang #01

Und dazu die x und y Koordinaten von dieser Beispielkontur:
-> Anhang #02


Bisher habe ich bereits versucht:
a) Über den gradient Befehl auf eine Normalensteigung zu kommen und dann über Pythagoras auf delta_x bzw delta_y zu kommen. Für einen einfachen Kreis funktioniert das, bei „komplexeren“ Formen stößt das jedoch schnell an seine Grenzen.

b) über splines Nachbarpunkte interpoliert, die splines dann abgeleitet und dann als Einheitsnormalenvektor geschrieben. Auch hier entsteht irgendwo ein Problem

c) die Analogie zu komplexen Zahlen genutzt und so den Winkel im Dreieck, das durch die Normale und delta_x und delta_y gebildet wird, beschrieben. Auch das funktioniert bei einem einfachen Kreis, bei komplexeren Formen, die ihre Form in einem Quadranten erheblich ändern, müsste man für jede Form viel zu viele Ausnahmen programmieren, damit das funktioniert.

Jetzt bin ich mit meinem Latein am Ende und hoffe auf eure Hilfe!


Zusammengefasst nochmal das Wichtigste:
Der neue Punkt muss
a) 90° auf dem alten Punkt stehen
b) genau den Abstand r=5 zum alten Punkt haben
Und das ganze soll später automatisch für jede beliebige Form durchlaufen.


Sollte an der Aufgabenstellung etwas unklar sein, einfach melden, ich habe mich bemüht mein Problem so ausführlich wie möglich zu beschreiben.

Vielen vielen Dank
Christian

Kontur_Koordinaten.mat
 Beschreibung:
Anhang #02

Download
 Dateiname:  Kontur_Koordinaten.mat
 Dateigröße:  11.48 KB
 Heruntergeladen:  350 mal
IMG_20170306_115910_edit.jpg
 Beschreibung:
Anhang #01

Download
 Dateiname:  IMG_20170306_115910_edit.jpg
 Dateigröße:  618.02 KB
 Heruntergeladen:  423 mal
Private Nachricht senden Benutzer-Profile anzeigen


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2017, 11:06     Titel:
  Antworten mit Zitat      
Das Stichwort hier ist Parallelkurve und nicht Hüllkurve. Ist auf jeden Fall nicht so einfach, vor allem dann wenn Spitzen entstehen (siehe Wikipedia Eintrag zu "Parallelkurve"). Wenn du wirklich nur die Koordinaten brauchst und dir die Spitzen nichts ausmachen sollte dir das hier weiterhelfen: https://de.mathworks.com/matlabcent.....nge/27873-parallel-curves
Wenn du allerdings keine überschneidenden Kurven haben willst dann wird es glaube ich schwer. Habe damals als ich dasselbe Problem hatte keine zufriedenstellende Lösung gefunden.

Viele Grüße
 
Christian__85
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 06.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2017, 13:08     Titel:
  Antworten mit Zitat      
Danke dir erstmal für deine Antwort! Ich habe mir die function gerade anschauen wollen, bekomme aber immer den Fehler:
Code:
Undefined function or variable 'magn'.

Error in parallel_curve (line 239)
norm_nv=magn(nv, 2);

Error in parallel_curves (line 17)
[x_inner, y_inner, x_outer, y_outer, R, unv, concavity, overlap]=parallel_curve(x, y, d, make_plot);


Selbst den in der function vorgefertigten Beispielen:
Code:
x=1/1000*(0:10000);
y=10*sin(2*pi*x);
d=10;
make_plot=1;
[x_inner, y_inner, x_outer, y_outer, R, unv, concavity, overlap]=parallel_curve(x, y, d, make_plot);


Liegt das vielleicht an der Matlab Version? Diese function ist ja nun schon 10 Jahre alt?


Edit:
Kann es sein, dass es früher mal den Operator für Magnitude -> mag gegeben hat?
Theoretisch sollte der Operator sum ja das gleiche machen oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2017, 13:40     Titel:
  Antworten mit Zitat      
Das ist auch eine Funktion aus dem File Exchange. Steht auch so als Kommentar drin Wink

Code:
% % List of Dependent Subprograms for
% % parallel_curve
% %
% % FEX ID# is the File ID on the Matlab Central File Exchange
% %
% %
% % Program Name   Author   FEX ID#
% % 1) magn      Paolo de Leva      8782


Damit sollte das funktionieren!

Viele Grüße
 
Christian__85
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 06.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2017, 14:07     Titel:
  Antworten mit Zitat      
Oh, das habe ich wohl überlesen, Danke!

Jetzt bin ich soweit, siehe Anhang.

Was ich da nicht ganz verstehe, die Variable "flag1" soll eigentlich verhindern, dass inner und outer springt. Zumindest lese ich das aus der Beschreibung so raus. Allerdings passiert das bei mir dennoch.
Hat dazu noch jemand eine Anregung?

17195348_1373061602759808_1893496721_o.jpg
 Beschreibung:

Download
 Dateiname:  17195348_1373061602759808_1893496721_o.jpg
 Dateigröße:  69.51 KB
 Heruntergeladen:  366 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian__85
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 06.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2017, 14:19     Titel:
  Antworten mit Zitat      
Ich habs!!! Tausend Dank an dich "Gast", du bist mein Held!!!
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 - 2025 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.