Unterzeichnet Winkel zwischen zwei Vektoren, ohne eine Referenz-Ebene

(In drei Dimensionen) ich bin auf der Suche nach einem Weg, um zu berechnen, unterzeichnet Winkel zwischen zwei Vektoren, da keine anderen Informationen als die Vektoren. Wie beantwortet diese Frage, es ist einfach genug, um zu berechnen, unterzeichnet angegebene Winkel der normalen der Ebene, auf die die Vektoren senkrecht zueinander stehen. Aber ich finde keinen Weg, dies zu tun, ohne dass Wert. Es ist offensichtlich, dass das Kreuzprodukt zweier Vektoren erzeugt so eine normale, aber ich habe in der folgenden Widerspruch mit der Antwort oben:

signed_angle(x_dir, y_dir) == 90
signed_angle(y_dir, x_dir) == 90

wo ich erwarten würde, dass das zweite Ergebnis negativ. Dies ist aufgrund der Tatsache, dass das Kreuzprodukt cross(x_dir, y_dir) ist in die entgegengesetzte Richtung cross(y_dir, x_dir) die folgenden psuedocode mit normalisierter input:

signed_angle(Va, Vb)
    magnitude = acos(dot(Va, Vb))
    axis = cross(Va, Vb)
    dir = dot(Vb, cross(axis, Va))
    if dir < 0 then
        magnitude = -magnitude
    endif
    return magnitude

Ich glaube nicht, dass dir jemals negativ über.

Ich gesehen habe das gleiche problem mit den vorgeschlagenen atan2 Lösung.

Ich bin auf der Suche nach einem Weg zu machen:

signed_angle(a, b) == -signed_angle(b, a)
InformationsquelleAutor metatheorem | 2012-04-13
Schreibe einen Kommentar