从加速度计中找出角度的符号
Find the sign of the angles from an accelerometer
我正在使用这个等式来计算我的 x、y 和 z 相对于重力的角度:
directionalVector = Math.Sqrt(Math.Pow(accelForceX, 2) + Math.Pow(accelForceY, 2) + Math.Pow(accelForceZ, 2));
accelAngleX = (Math.Acos(accelForceX / directionalVector) * (180f / Math.PI)); ;
accelAngleY = (Math.Acos(accelForceY / directionalVector) * (180f / Math.PI));
accelAngleZ = (Math.Acos(accelForceZ / directionalVector) * (180f / Math.PI));
accelForceN
是加速度计轴的读数,以 G 为单位
这种方式产生的结果范围是 0-180 度,没有负数。
如何找到角的符号?
我认为您对此处实际计算的内容感到困惑。确保您知道您只是通过使用余弦的定义来计算角度:
cos(accelAngleN*2*Math.Pi/360) = accelForceN/directionalVector
(与 2Pi/360
的乘法只是将角度转换为 Radian)。现在考虑三角形中的 angular 和为 180°,因此在这种情况下负角或大于 180° 的角作为结果没有任何意义。这只是看待 cos 在整个实数域上不是单射这一事实的另一种方式,因此 arccos 被定义为 [-1,1] -> [0,Pi]
(或 [0°,180°]
上的函数)。
那么您当前正在计算的是 x/y/z-vectors 与方向矢量(而不是重力,无论如何都是 z 轴方向,不是吗?)的角度观点你的输出是完全有效的。
如果您需要进一步转换结果的帮助,请提供一个示例(为简单起见,2 维应该足够好)您的期望。
我正在使用这个等式来计算我的 x、y 和 z 相对于重力的角度:
directionalVector = Math.Sqrt(Math.Pow(accelForceX, 2) + Math.Pow(accelForceY, 2) + Math.Pow(accelForceZ, 2));
accelAngleX = (Math.Acos(accelForceX / directionalVector) * (180f / Math.PI)); ;
accelAngleY = (Math.Acos(accelForceY / directionalVector) * (180f / Math.PI));
accelAngleZ = (Math.Acos(accelForceZ / directionalVector) * (180f / Math.PI));
accelForceN
是加速度计轴的读数,以 G 为单位
这种方式产生的结果范围是 0-180 度,没有负数。
如何找到角的符号?
我认为您对此处实际计算的内容感到困惑。确保您知道您只是通过使用余弦的定义来计算角度:
cos(accelAngleN*2*Math.Pi/360) = accelForceN/directionalVector
(与 2Pi/360
的乘法只是将角度转换为 Radian)。现在考虑三角形中的 angular 和为 180°,因此在这种情况下负角或大于 180° 的角作为结果没有任何意义。这只是看待 cos 在整个实数域上不是单射这一事实的另一种方式,因此 arccos 被定义为 [-1,1] -> [0,Pi]
(或 [0°,180°]
上的函数)。
那么您当前正在计算的是 x/y/z-vectors 与方向矢量(而不是重力,无论如何都是 z 轴方向,不是吗?)的角度观点你的输出是完全有效的。
如果您需要进一步转换结果的帮助,请提供一个示例(为简单起见,2 维应该足够好)您的期望。