Я использую кватернионы в моей игре для вычисления некоторых базовых углов.
Теперь я пытаюсь получить угол кватерниона по определенной оси.Итак, дан кватернион и новая ось.Могу ли я вернуть спроецированный угол назад?
Мне кажется, это хороший способ рассчитать угол между двумя векторами со знаком.Код написан на Unity3D C #, но это не обязательно так.Это более общий метод.
public static float DirectionalAngle(Vector3 from, Vector3 to, Vector3 up)
{
// project the vectors on the plane with up as a normal
Vector3 f = Vector3.Exclude(up, from);
Vector3 t = Vector3.Exclude(up, to);
// creates an angle-axis rotation
Quaternion q = Quaternion.FromToRotation(f, t);
// do something to get the angle out of the quaternion,
// given the new axis.
// TODO: Make this method. Doesn't exist.
Quaternion q2 = Quaternion.GetAngleFromAxis(q, Vector3.right);
return q2.Angle(q2);
}
Я всегда могу получить угол и ось от кватерниона, а также x, y, z, w и углы Эйлера.Но я не вижу способа получить спроецированный угол от кватерниона на оси.