2016-07-20 29 views
-1

Angenommen, ich habe zwei Vektoren, A und B, und eine Achse (normalisierter Vektor), wie finde ich den Winkel zwischen A und B, so dass die Winkeldifferenz zwischen A nach Rotation (Achse, Winkel) und B wrt Die gegebene Achse ist 0. A muss nach der Drehung nicht gleich B sein. Grundsätzlich möchte ich die Winkeldifferenz zwischen A und B in einer bestimmten Ebene finden.Wie wird der vorzeichenbehaftete Winkel zwischen 2 Vektoren mit einer gegebenen Achsennormalen in 3D berechnet?

Hinweis: Dies unterscheidet sich von der Suche nach dem kürzesten Winkel zwischen 2 Vektoren, da die Achse nicht das Kreuzprodukt zwischen A und B ist. Daher gilt die Technik here (und viele SO-Antworten) nicht. Dies muss in 3D funktionieren.

+6

Ich stimme für das Schließen dieser Frage als Off-Topic, weil es um Geometrie/[Math.se] statt Programmierung oder Softwareentwicklung geht. – Pang

+0

w/e Ich denke, Computer-Physik und Computergrafik sind nicht Programmierung oder Software-Entwicklung richtig? Sachen wie diese: http://stackoverflow.com/questions/11022446/direction-of-shortest-rotation-between-two-vectors ist offtopic auch recht? – user80667

Antwort

0

Ich glaube nicht, dass das Problem eine Lösung hat, wenn A und B nicht die gleiche Länge haben und A und B beide den gleichen Winkel (im üblichen Sinne des kürzesten Winkels zwischen Vektoren) mit der Achse bilden. Ich gehe davon aus, dass diese gegeben sind.

In diesem Fall wäre eine Lösung, die orthogonale Projektion von A und B in eine Ebene zu berechnen, die orthogonal zur Achse ist. Dies könnte durch Subtrahieren der Komponente in Richtung der Achse erfolgen. Also, wenn ich einen Einheitsvektor in Richtung der Achse haben und es X nennen, würde die Berechnung so etwas wie

Aproj = A - dot(A, X)X 
Bproj = B - dot(B, X)X 

Dann wird der Winkel zwischen Aproj und Bproj (im üblichen Sinne der kürzesten Winkel) der Winkel der Drehung um die Achse, nach der Sie fragen.

Ich bin mir nicht sicher, ob dies der einfachste Weg ist, es zu berechnen, aber es sollte ziemlich allgemein funktionieren.

+0

Als ich Ihre Antwort las, wurde mir klar, dass ich die Frage falsch formuliert hatte. Ich sollte sagen, dass die Winkeldifferenz zwischen A nach Rotation (Achse, Winkel) und B wrt zu der gegebenen Achse 0. Grundsätzlich möchte ich die Winkeldifferenz zwischen A und B in einer bestimmten Ebene finden. Ich hoffe, das ist jetzt klar. – user80667

+0

Wenn ich Ihre Frage richtig verstehe, ist die Antwort immer noch die gleiche. Projizieren Sie die Vektoren in die Ebene. Dann berechne den Winkel zwischen den projizierten Vektoren. –

0

Das Skalarprodukt gibt den Winkel zwischen A & B. In Fortran etwas wie: dotAB = DASIN (DOT (A/A |, B/| B |))).

ein Kreuzprodukt ergibt einen Vektor orthongal zu A und B.

Die Projektion des Vektors Xproduct-Richtung den Ebenen (oder Achse) sollten Sie dorthin, wenn DotAB durch den Winkel multipliziert. Sie werden wahrscheinlich ein Sinus oder Cosinus drin sein.