从加速度计中找出角度的符号

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 维应该足够好)您的期望。