(W trzech wymiarach) Poszukuję sposobu obliczenia zarejestrowanego kąta między dwoma wektorami, bez podania informacji innych niż te wektory. Jak podano w this question, jest to dość proste, aby obliczyć kąt znaku ze względu na normalną płaszczyznę, do której wektory są prostopadłe. Ale nie mogę znaleźć sposobu, aby to zrobić bez tej wartości. To oczywiste, że iloczyn dwóch wektorów produkuje takie normalne, ale ja napotkasz następującej sprzeczności pomocą odpowiedź powyżej:Podpisany kąt między dwoma wektorami bez płaszczyzny odniesienia
signed_angle(x_dir, y_dir) == 90
signed_angle(y_dir, x_dir) == 90
gdzie spodziewałbym drugi wynik będzie ujemny. Wynika to z faktu, że iloczyn cross(x_dir, y_dir)
jest w przeciwnym kierunku cross(y_dir, x_dir)
, biorąc pod uwagę następujące psuedocode ze znormalizowanym wejściowych:
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
nie uważać DIR zawsze ujemny powyżej.
Widziałem ten sam problem z sugerowanym rozwiązaniem atan2.
szukam sposób, aby:
signed_angle(a, b) == -signed_angle(b, a)
to nie to: http://www.jtaylor1142001.net/calcjat/Solutions/VDotProduct/VDPTheta3D.htm czego szukasz? – Jack
Link w powyższym komentarzu nie działa – ephere