(В трех измерениях) Я ищу способ вычислить подписанный угол между двумя векторами, не имея информации, отличной от этих векторов. Как уже было сказано в этом вопросе, достаточно просто вычислить угловой знак, заданный нормалью плоскости, перпендикулярной векторам. Но я не могу найти способ сделать это без этой ценности. Очевидно, что перекрестное произведение двух векторов создает такую нормаль, но я воспользовался следующим противоречием, используя ответ выше:
signed_angle(x_dir, y_dir) == 90
signed_angle(y_dir, x_dir) == 90
где я ожидаю, что второй результат будет отрицательным. Это связано с тем, что кросс-произведение cross(x_dir, y_dir)
находится в противоположном направлении от cross(y_dir, x_dir)
, учитывая следующий psuedocode с нормированным входом:
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
Я не считаю, что dir никогда не будет отрицательным.
Я видел ту же проблему с предлагаемым решением atan2.
Я ищу способ сделать:
signed_angle(a, b) == -signed_angle(b, a)