Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Linie einer bestimmten Länge zwischen 2 Punkten plotten

 

Anna12
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 26.02.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2019, 14:05     Titel: Linie einer bestimmten Länge zwischen 2 Punkten plotten
  Antworten mit Zitat      
Hallo zusammen,

ich suche nach einer Möglichkeit in Matlab eine Linie einer bestimmten Länge (z. B. 10 mm) auf einer bereits bestehenden Linie, die zwei Punkte verbindet zu zeichen (im 3D-Raum). Im eingefügten Codebeispiel wird eine Linie zwischen zwei gegebenen Punkten erstellt. Wie kann ich eine zusätzliche Linie drauflegen, die beispielsweie bei Punkt x0,y0,z0 beginnt, aber nur eine festgelegte Länge hat, anstatt beide Punkte zu verbinden. Gibt es hierfür eine Matlab-Funktion?

Vielen Dank im Voraus.

Viele Grüße

Code:
% Das ist mein Programm.

close all, clear all

x0=84;
y0=33;
z0=2;

x1=100;
y1=20;
z1=5;

plot3(x0,y0,z0,'b.')
hold on
plot3(x1,y1,z1,'b.','Color','red')
xlabel('x [mm]')
ylabel('y [mm]')
zlabel('z [mm]')
hold on
plot3([x0; x1], [y0; y1], [z0; z1]);
hold on
 
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 20.300
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 03.04.2019, 19:15     Titel:
  Antworten mit Zitat      
Hallo,

du brauchst einen normalisierten Richtungsvektor und den kannst du entsprechend multiplizieren.

Code:
p0 = [x0; y0; z0];
p1 = [x1; y1; z1];
nvec = norm(p1 - p0);
pEnd = p0 + laenge * nvec;

Dann hast du den Endpunkt.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Anna12
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 26.02.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2019, 10:48     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

du brauchst einen normalisierten Richtungsvektor und den kannst du entsprechend multiplizieren.

Code:
p0 = [x0; y0; z0];
p1 = [x1; y1; z1];
nvec = norm(p1 - p0);
pEnd = p0 + laenge * nvec;

Dann hast du den Endpunkt.

Grüße,
Harald


Hallo,

vielen Dank für Ihre Antwort. Ich habe die "norm"-Funktion, die die euklidische Norm des Vektors liefert, für meinen Anwendungszweck ausprobiert. Leider bringt die Funktion nicht die gewünschten Ergebnisse. Der Term nvec = norm(p1 - p0); liefert den Betrag des Vektors (also seine Länge). Die Länge habe ich bereits gegeben und suche die dazugehörigen x-, y- und z-Koordinate, die allerdings nicht irgendwo im Raum liegen sollten, sondern genau auf der bereits geplotteten Linie zwischen den Punkten x0, y0, z0 und x1, y1, z1. Wenn ich zu dem Punkt p0 das Produkt aus der Länge (ich gehe davon aus, dass hier die gewünschte Länge gemeint ist) und dem normierten Vektor addiere, dann bekomme ich x-, y- und z-Koordinate eines Punktes, der weit außerhalb liegt und die gewünschten Bedingunen nicht erfüllt. Ich kann es auch nicht ganz nachvollziehen aus welchem Grund die Länge mit der normierten Länge multipliziert werden soll. Eventuell habe ich Ihren Ansatz nicht ganz richtig verstanden. Im Anhang schicke ich einen Plot, in dem ich die Linie mit einem Zeichenprogramm angedeutet habe, wie sie positioniert werden soll.

Vielleicht hätten Sie weitere Ansätze bzw. Tipps.

Vielen Dank im Voraus und viele Grüße

Anna12

Beispiel.png
 Beschreibung:
Die neue Linie soll eine definierte Länge, besitzen, die bereits gegeben ist und genau auf der Verbindungslinie zwischen den zwei Punkten liegen.

Download
 Dateiname:  Beispiel.png
 Dateigröße:  38.23 KB
 Heruntergeladen:  27 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 20.300
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 09.04.2019, 19:24     Titel:
  Antworten mit Zitat      
Hallo,

ich meinte ja, dass du einen normalisierten Richtungsvektor brauchst. Bei der Umsetzung hat sich dann allerdings ein Fehler eingeschlichen.

Code:
p0 = [x0; y0; z0];
p1 = [x1; y1; z1];
nvec = (p1 - p0)/norm(p1 - p0);  % korrigiert
pEnd = p0 + laenge * nvec;
plot3([x0; pEnd(1)], [y0; pEnd(2)], [z0; pEnd(3)], 'r', 'LineWidth', 2);
hold off


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Anna12
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 26.02.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2019, 09:47     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

ich meinte ja, dass du einen normalisierten Richtungsvektor brauchst. Bei der Umsetzung hat sich dann allerdings ein Fehler eingeschlichen.

Code:
p0 = [x0; y0; z0];
p1 = [x1; y1; z1];
nvec = (p1 - p0)/norm(p1 - p0);  % korrigiert
pEnd = p0 + laenge * nvec;
plot3([x0; pEnd(1)], [y0; pEnd(2)], [z0; pEnd(3)], 'r', 'LineWidth', 2);
hold off


Grüße,
Harald


Vielen Dank, ich bin begeistert! Hat alles geklappt.

Beste Grüße
Anna12

Beispiel2.PNG
 Beschreibung:

Download
 Dateiname:  Beispiel2.PNG
 Dateigröße:  20.31 KB
 Heruntergeladen:  23 mal
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2019 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.