Winkel zwischen Vektoren

Neue Frage »

si-d Auf diesen Beitrag antworten »
Winkel zwischen Vektoren
Meine Frage:
Hallo,

ich möchte im Prinzip einen Winkel (0 - 360 Grad) zwischen zwei Vektoren berechnen.

Hintergrund bzw. Gegeben ist:
- Koordinatensystem mit positiver wie negativer XY-Achse
- 2 Punkte A,B mit Koordinaten
- Orientierung alpha als Winkel (0 - 360 Grad) von A im Bezug auf das Koordinatensystem

Abhängig davon möchte ich nun den Winkel omega zwischen A und B immer im Bereich 0 - 360 Grad erhalten.

Meine Ideen:
Mein Vorgehen wäre:
1. Vektor AA' erstellen durch Projektion von A mit alpha und einem beliebigem r auf A'.
2. Winkel omega zwischen AA' und AB berechnen.

Leider habe weder zu 1. noch zu 2. bisher eine funktionierend Lösung gefunden. Könnte mir da bitte jdm. weiterhelfen?
Steffen Bühler Auf diesen Beitrag antworten »
RE: Winkel zwischen Vektoren
Ich arbeite bei sowas gerne mit der atan2-Funktion, die mir für gegebene xy-Koordinaten den Winkel des Vektors liefert. Hier würde ich also den Winkel von AA' mit atan2(A'y-Ay,A'x-Ax) sowie den Winkel von AB mit atan2(By-Ay,Bx-Ax) berechnen. Die Differenz dieser beiden Winkel suchst Du.

Viele Grüße
Steffen

EDIT: Argumente bei atan2(y,x) waren vertauscht.
si-D Auf diesen Beitrag antworten »

Okay, ich habe es nun soweit.

Allerdings erhalte ich aktuell nur Werte für omega zwischen 0 und 180 Grad.
Wie kann ich z.B. auch Werte von 180 bis 360 Grad erreichen?
si-D Auf diesen Beitrag antworten »

Hallo Steffen,

ehm, kannst du das bitte etwas genauer ausführen.

Den Winkel AA' zu was?
Meinst du atan2 = atan zum Quadrat?
Ich verstehe ehrlich gesagt gerade auch die Eingabe von atan2 a A'x - Ax, A'y - Ay nicht...

VG
Steffen Bühler Auf diesen Beitrag antworten »

Zitat:
Original von si-D
Den Winkel AA' zu was?


Zur Horizontalen, also der x-Achse.

Zitat:
Original von si-D
Meinst du atan2 = atan zum Quadrat?


Nein, atan2 ist eine Erweiterung der Arcustangens-Funktion. Du kannst also auch diese nehmen: Nur, wie Du ja auch schon gemerkt hast, gibt diese Funktion bei negativem x falsche Werte zurück und für x=0 kracht es. Wenn Du diese Ausnahmen abfängst, kannst Du damit arbeiten.
si-D Auf diesen Beitrag antworten »

Habe es nun mal in einem Codebeispiel ausprobiert.

Hier habe allerdings wieder dasselbe Problem, dass ich nur Werte zwischen 0 und 180 erhalte...

Wie entscheide ich, dass ich das Resultat von 360 subtrahieren muss?
 
 
Steffen Bühler Auf diesen Beitrag antworten »

Wenn x negativ ist, addierst Du 180°.

Für x=0 ist bei y>0 der Winkel 90°, sonst 270°.
si-d Auf diesen Beitrag antworten »

Hallo Steffen,

danke für deine Hilfe.
Nur leider kann ich mir das mit der atan2-Funktion bildlich überhaupt nicht mehr vorstellen.

Gibt es zu meiner ursprünglichen Idee nicht auch eine Möglichkeit, diesen Fall abzutesten?
Steffen Bühler Auf diesen Beitrag antworten »

Das entspricht doch Deiner ursprünglichen Idee.

Nehmen wir mal an, dass A=(3|1), A'=(7|3) und B=(-1|-2). Das sollte so einigermaßen passen.

Dann ist der Winkel von AA'

Und der von AB ist

Die Differenz überlasse ich Dir. smile
HAL 9000 Auf diesen Beitrag antworten »

Zitat:
Original von si-d
Nur leider kann ich mir das mit der atan2-Funktion bildlich überhaupt nicht mehr vorstellen.

Du hast doch bestimmt schon mal was von Polarkoordinaten gehört? atan2(y,x) beschreibt den zum Punkt gehörenden Polarkoordinatenwinkel, und zwar für jede mögliche Lage von x,y, d.h. in allen vier Quadranten. Allerdings eben im Winkelbereich , was die von Steffen beschriebene Korrektur nötig macht, wenn man stattdessen den Bereich bevorzugt.
si-d Auf diesen Beitrag antworten »

Hallo,

mm okay. Woher weiß ich, welchen Winkel ich von welchem subtrahieren muss?

Ich nehme an du stützt dich auf die Formel im Anhang.

Müsste ich danach nicht für den Fall x < 0 UND y < 0 180 addieren?
HAL 9000 Auf diesen Beitrag antworten »

Oje, ich wollte nicht deine Aufmerksamkeit auf diese Formel lenken, sondern nur auf die geometrische Interpretation von atan2(y,x), weil du ja sagtest, du kannst es dir bildlich nicht vorstellen - nichts weiter! geschockt

D.h. halte dich an Steffens Erklärungen - und ich bin weg (Entschuldigung für die Störung). Wink
si-D Auf diesen Beitrag antworten »

Mein Post bezog sich noch auf Steffens Antwort.

Ich hatte deine Antwort erst nach meinem Posting gesehen...smile
Steffen Bühler Auf diesen Beitrag antworten »

Zitat:
Original von si-d
Woher weiß ich, welchen Winkel ich von welchem subtrahieren muss?


Winkel wachsen im mathematisch positiven Sinn. In Deiner Zeichnung ziehst Du also den kleineren vom größeren ab. Vielleicht bist Du aber eh nur am Betrag der Winkeldifferenz interessiert, dann ist's egal.

Zitat:
Original von si-d
Müsste ich danach nicht für den Fall x < 0 UND y < 0 180 addieren?


Nein, nicht nur da. Wie Du siehst, subtrahierst Du hier bei negativem x und negativem y die 180°, bei y größer oder gleich Null addierst Du sie. Da der Winkel aber jeweils derselbe bleibt, kannst Du die dort etwas verschwurbelte Fallunterscheidung vereinfachen, dass Du bei negativem x 180° addierst, wie geschrieben.
si-D Auf diesen Beitrag antworten »

Nächste Zwischenfrage:

Muss ich diese Fallunterscheidung überhaupt beachten, sofern ich gleich die atan2-Funktion nehme?

Dort findet diese Unterscheidung doch schon intern statt oder?
Steffen Bühler Auf diesen Beitrag antworten »

So ist es, atan2 erledigt alles für Dich.

Nur weil Du anscheinend mit der atan2-Funktion nicht klarzukommen schienst, hab ich Dir das Beispiel mit arctan gezeigt.
si-D Auf diesen Beitrag antworten »

Okay,

habe nun eine Lösung. So ganz klar ist mir das ganze aber leider noch nicht.

Mein Vorgehen ist:

1. r1 = atan2(A'y-Ay, A'x-Ax)
r2 = atan2(By-Ay, Bx-Bx)
2. r3 = ((r2 - r1) / pi) * 180; //umrechnung in grad
3. r4 = 360 + r3
4. prüfe ob r4 > 360, wenn ja 360 - r3
Steffen Bühler Auf diesen Beitrag antworten »

Die Zeilen 3 und 4 sind mir auch nicht klar, die würde ich weglassen.

Was ist Dir nicht klar?
si-D Auf diesen Beitrag antworten »

Liegt mein Endwinkel im Bereich von 0 - 90 Grad, liefert mir atan2 direkt den richtigen Wert.
Dieser ist zudem positiv.

Liegt mein Endwinkel im Bereich 90 360 Grad, liefert mir atan2 einen negativen Winkel zurück (Schritt 2).

Ich addiere 360 Grad um für den negativen Winkel in Schritt 2 den korrekten positiven Winkel im Bereich von 0 - 360 Grad zu erhalten.

Mein Endwinkel kann durch die Addition von 360 Grad allerdings nun größer als 360 Grad sein. Dies gilt eben für alle Winkel zwischen 0 - 90 Grad, die ja bereits schon korrekt und positiv sind.

Für diese subtrahiere ich daher wieder 360 Grad.

Was mir eben leider selbst noch nicht ganz klar ist, ist diese Addition der 360 Grad.
Ich hätte bspw. erwartet, dass alle Werte für 0 - 180 bereits positiv und korrekt sind.
Also alle Werte für y > 0.
Steffen Bühler Auf diesen Beitrag antworten »

Zitat:
Original von si-D
Ich hätte bspw. erwartet, dass alle Werte für 0 - 180 bereits positiv und korrekt sind.
Also alle Werte für y > 0.


Nein, der arctan (und somit auch atan2f ür y>0) liefert definitionsgemäß immer Winkel zwischen -90° und +90°. Der atan2 selber liefert -180°..+180°

Wenn Du also unbedingt Winkel zwischen 0 und 360° brauchst, ist das Einfachste, immer erstmal 360° zu addieren. Wenn's dann über 360° ging, wieder 360° abziehen.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »