Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

1

14.07.2005, 18:29

Winkel zwischen zwei 3D-Vektoren berechnen

Mein Problem ist folgendes:
Ich habe zwei unterschiedliche Vektoren A u. B. Nun möchte ich herausfinden, um wie viel Grad/Radianten ich den Vektor A entlang der X- Y- Z-Achse rotieren muss, damit A die selbe Ausrichtung wie B hat.
Die Winkel kann ich derzeit schon berechnen, indem ich dies für jede Ebene mit 2D-Vektoren mache (vielleicht gibts auch ne bessere Lösung). Das Problem ist jetzt noch, dass der Winkel zwischen den Vektoren immer ein positiver Wert ist => ich kann die Drehrichtung des Vektors nicht bestimmen.
Vielleicht weiß einer von euch, was ich das machen kann!

mfg Philipp

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

2

14.07.2005, 19:47

Konnte das Problem bereits selber lösen.
Mit Hilfe des Kreuzprodukts kann man die Drehrichtung herausfinden.

mfg Philipp

3

14.07.2005, 20:19

alos winkel zw. 2 vektoren klingt eher nach dot

Anonymous

unregistriert

4

14.07.2005, 23:13

Stimmt.
Aber das Kreuzprodukt verwende ich auch nicht um die Winkel zu berechnen (falls du darauf anspielen wolltest), sondern um die Drehrichtung herauszufinden.
Für die Berechnung der Winkel verwende ich folgende Formel:

x = arccos A * B / (|A| * |B|).

A * B ist ja das Skalarprodukt = Punktprodukt = dotproduct


mfg Philipp

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

5

14.07.2005, 23:15

Der vorherige Beitrag war von mir.
Ich muss mir endlich angewöhnen mich einzuloggen :angel: .

mfg Philipp

DrthM2001

Alter Hase

Beiträge: 721

Wohnort: Karlsruhe

  • Private Nachricht senden

6

14.07.2005, 23:54

ich darf mal scherfgen zitieren:

C-/C++-Quelltext

1
float Angle(const Vector3& v1, const Vector3& v2) {return acosf(Dot(NormalizeEx(v1), NormalizeEx(v2)));}


EDIT: Acchso drehrichtung... na egal jetzt
ich sollte besser schlafen :sleep:

7

16.07.2005, 22:04

Zitat von »"Anonymous"«

Stimmt.
Aber das Kreuzprodukt verwende ich auch nicht um die Winkel zu berechnen (falls du darauf anspielen wolltest), sondern um die Drehrichtung herauszufinden.
Für die Berechnung der Winkel verwende ich folgende Formel:

x = arccos A * B / (|A| * |B|).

A * B ist ja das Skalarprodukt = Punktprodukt = dotproduct


mfg Philipp


Hi,
kannst du das bitte erklären welche Information man mit dem Kreuzprodukt (und wie) genau gewinnt?

mfg
Tschismo

8

16.07.2005, 22:08

wenn du 2 vektoren kreuz-multiplizierst ist das ergebnis ein vektor
der zu beiden ausgangsvektoren orthogonal ist

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

16.07.2005, 22:17

wenn due vektoren nciht einen winkel von 180° haben ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

10

17.07.2005, 09:34

stimmt, man bekommt einen Vektor der zu den beiden anderen Vektoren im rechten Winkel steht.
Zusätzlich kann man aber noch erwähnen, dass dieser Vektor mit den beiden anderen Vektoren immer ein rechtshändiges Koordinatensystem aufbaut. Deshalb kann ich mit dem Kreuzprodukt auch die Drehrichtung für meinen Vektor herausfinden

z.B.:
Vektor A soll immer an Vektor B angeglichen werden
A=[0, 1, 0] B=[1,0,0]; crossp(A, B) = [0, 0, -1] die Z-Komponente ist negativ => Drehung nach rechts
A=[1,0,0] B=[0, 1, 0]; crossp(A, B) = [0, 0, 1] die Z-Komponente ist positiv => Drehung nach links

mfg Philipp

Werbeanzeige