从Android中的加速度计获得的x,y,z值是什么?

use*_*096 4 android

起初我想:

  • x - 从左到右倾斜手机,反之亦然
  • y - 倒置,反之亦然
  • z - 上下提起手机

但它似乎不是那样的.如果我错了,任何人都可以纠正我.

我想知道这些值,以便知道手机的角度.是否可以使用这些值来了解它?

Kau*_*tuv 5

加速度是矢量,即它的大小和发生方向的重要性.

保持这一点,并在Nicolai DitlevKroghKrüger提供的链接中看到图像,我们得到的是手机的右侧是正X方向,顶侧是正Y方向,屏幕侧是正Z方向.

现在力=质量x加速度

因此加速度=力/质量

现在,重力始终作用于您的设备.为了防止它掉落,你必须施加相同的力但是在"OPPOSITE"方向.

现在,当您将手机放在水平桌面上时,桌子会施加向上的力(从手机背面朝向屏幕),这是正Z方向.因此,此处的加速度是手机在正Z方向上的力/质量.由于手机没有移动,意味着桌子上的力等于重力,并且在任何其他方向上也没有其他力.重力=质量×9.8(约).因此,对于加速度计的Z参数,您会看到接近+10的值,而其他两个接近于零.

再举一个例子.这次握住手机,使手机右侧向下,左侧向上,并将手机靠近耳机和麦克风(对边).在这种情况下,您向上施加力以抵抗重力,以防止您的手机在负X方向下降(请记住,在手机正X方向指向手机的右侧).因此,对于加速度计的X参数,您将看到接近-10的值.

如果用户从水平面以一定角度(比如说a)握住手机(假设用户向下倾斜手机的右侧),则重力变为质量x 9.8 x Cos(a),其中'a'的度数不是弧度,沿着手机的X轴.因此加速度现在变为9.8 x Cos(a).由于Cos(a)的最大值= 1(在a = 0度),对于任何其他角度,用户将看到加速度计的X参数的值小于9.8.如果角度a = 60度(大约),那么X参数将显示接近5的值,因为Cos(60)= 0.5.

这是加速度计输出值的变化方式.

用户可以使用X,Y和Z的值来计算设备从任何平面(例如水平面)的实际倾斜角度.

假设X参数显示值6.然后倾斜是aCos(6/9.8)(即Cos反向,结果将以弧度表示).将弧度转换为度数乘以180/pi.因此,最终倾斜角度'a'= aCos(6/9.8)*(180/pi)度.

这是您如何了解手机的倾斜度并使用它来模拟屏幕上数字对象的力量.更多倾斜意味着更多的加速度,因此更大的力


use*_*096 1

将加速度计的值获取到 mValuesAccel[3] 并将重力值获取到 mValuesMagnet[3] 后,执行以下方法。

enter code here
SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel,ValuesMagnet);   
SensorManager.getOrientation(mRotationMatrix, mValuesOrientation);
Run Code Online (Sandbox Code Playgroud)

执行完上述方法后,mValuesOrientation中得到的值为:

mValuesOrientation[0]: i)如果-ve X轴朝西,则0度;ii)朝南,然后-90度;iii)朝北,然后-180或180度;
iv) 面向东,然后 90 度;因此,它位于-180度到180度之间。 注意:1)将获得的X值转换为度数后,您将得到上述值。2)X轴将从原点到右侧,您的原点将在手机的左下角。

mValuesOrientation[1]:如果您举起手机(放在桌子上),使手机顶部面向天空,则您将获得 -ve 值,反之亦然 mValuesOrientation[2]:如果您移动手机,您将获得 +ve 值(放在桌子上),就像翻书上的一张纸一样,向左侧给出 -ve 值,向右侧给出 +ve 值。