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