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

Winkel zwischen 3 Punkten berechnen

 

ElDorado2604
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 30.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2015, 15:20     Titel: Winkel zwischen 3 Punkten berechnen
  Antworten mit Zitat      
Hallo zusammen,

ich habe folgendes Problem.

Über ein Bewegungsanalysesystem habe ich die 2dimensionalen Koordinaten (also x und y) von 3 Punkten a, b und c in einer Excel-Tabelle.

Diese möchte ich nun zuerst ein mal einlesen, dann die Punkte ab und bc verbinden und den Winkel zwischen den entstehenden Geraden berechnen.

Bisher habe ich folgendes:

Code:
clc
clear all
[daten] = xlsread('RE_G_L1');
f=daten(:,1);
xa=daten(:,2);
ya=daten(:,3);
xb=daten(:,4);
yb=daten(:,5);
xc=daten(:,6);
yc=daten(:,7);


Hier habe ich also die Excel eingelesen, und zugeordnet, welche Werte in welche Spalte stehen.

Jetzt stehe ich allerdings völlig auf dem Schlauch.
Kann mir jemand weiterhelfen?

VG

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.12.2015, 15:33     Titel:
  Antworten mit Zitat      
Hallo,

wo liegt das genaue Problem?
Du kannst aus den Punkten zwei Vektoren erzeugen (voneinander abziehen) und dann über das Skalarprodukt (entweder explizit berechnen oder dot ) den Cosinus des Winkels bestimmen, dann mit acos den Winkel.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 30.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2015, 16:08     Titel:
  Antworten mit Zitat      
Eine Linie zwischen den Punkten kann ich ja normal mit line (A,B) und line (B,C) erzeugen, wenn ich vorher

A = [xa;ya];

B = [xb;yb];

C = [xc;yc];

oder?

Wie berechne ich dann noch den Winkel zwischen den Linien?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.12.2015, 16:15     Titel:
  Antworten mit Zitat      
Hallo,

line hilft dir - abgesehen von der falschen Anwendung; siehe Doku - wenig, wenn du die Vektoren haben möchtest.

Die x-Koordinate von AB wäre z.B.
Code:


Ansonsten habe ich dir an sich die benötigten Schritte beschrieben. Zur Formel siehe hier:
https://de.wikipedia.org/wiki/Skalarprodukt
Ach ja, norm für Länge des Vektors fehlte noch.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 30.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2015, 16:18     Titel:
  Antworten mit Zitat      
Danke, schon verstanden!
Hab also das hier gemacht:

Code:
clc
clear all
[daten] = xlsread('RE_G_L1');
fr=daten(:,1);
xa=daten(:,2);
ya=daten(:,3);
xb=daten(:,4);
yb=daten(:,5);
xc=daten(:,6);
yc=daten(:,7);

A = [xa;ya];

B = [xb;yb];

C = [xc;yc];


AB = [xb-xa; yb-ya];
BC = [xc-xb; yc-yb];
plot (AB);
hold on
plot (BC);
 

Müsste so korrekt sein oder?

Dann habe ich also einen Vektor AB und einen Vektor BC.

Zuletzt fehlt dann nur noch der Winkel dazwischen, richtig?

Welchen Matlab-Befehl gibt es hier?

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.12.2015, 18:39     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Müsste so korrekt sein oder?

Sofern die Excel-Tabelle nur eine Zeile hat: ja.

Zitat:
Zuletzt fehlt dann nur noch der Winkel dazwischen, richtig?
Welchen Matlab-Befehl gibt es hier?

Meines Wissens gibt es nicht den einen Befehl hierfür. Wie du den Winkel über eine Folge einfacher Befehle berechnen kannst, habe ich dir bereits geschrieben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.12.2015, 23:31     Titel:
  Antworten mit Zitat      
Hallo ElDorado2604,

Den Winkel zwischen zwei Vektoren zu berechnen ist nicht trivial, wenn man das numerisch stabil tun möchte. Einfach nur den ACOS des Punkt-Produkts zu verwenden ist nämlich instabil, d.h. für machne Werte ist das Ergebnis sehr ungenau. Mit ASIN hat man das gleiche Problem, nur für andere Werte.

Stabil ist:
Code:
Angle = atan2(norm(cross(AB, BC), dot(AB, BC)) * (180 / pi);

Gruß, Jan
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.