我正在尝试转换从传感器获得的四元数并通过计算 theta 来获得音高。如果有人有兴趣,请看这篇文章- 第 2 章
我的问题出在以下代码中:
private void quaternionToEuler(float[] q, float[] euler)
{
euler[0] = (float)Math.Atan2((2 * q[1] * q[2]) - (2 * q[0] * q[3]), (2 * q[0] * q[0]) + ((2 * q[1] * q[1]) - 1));
euler[1] = -(float)Math.Asin(((2 * q[1] * q[3]) + (2 * q[0] * q[2]))); // theta
euler[2] = (float)Math.Atan2((2 * q[2] * q[3]) - (2 * q[0] * q[1]), (2 * q[0] * q[0]) + ((2 * q[3] * q[3]) - 1)); // phi
Console.WriteLine(euler[0] + ","+euler[1]+"," + euler[2]);
}
euler 1 得到的音调总是返回 Nan(不是数字) 我不确定我是否正确实现了算法。出于某种原因,Asin(d),其中 d 的输出为 >1 且 <-1。