我尝试使用 SensorEvent.values 中的 Z 轴数据,但它没有检测到我的手机在 XY 平面上的旋转,即。围绕 Z 轴。
我将其用作坐标轴的引用。对吗?
如何使用加速度计值测量该运动?
这些游戏做类似的事情:Extreme Skater , 涂鸦跳跃。
PS:我的手机方向是横向的。
最佳答案
这里基本上有两种情况:设备平放和不平放。这里的平面是指设备屏幕表面与世界 xy 平面之间的角度(我称之为倾角)小于 25 度或大于 155 度。想象一下手机平放或从 table 稍微向上倾斜。
首先您需要对加速度计矢量进行归一化。
也就是说,如果 g 是加速度计传感器事件值返回的向量。在代码中
float[] g = new float[3];
g = event.values.clone();
double norm_Of_g = Math.sqrt(g[0] * g[0] + g[1] * g[1] + g[2] * g[2]);
// Normalize the accelerometer vector
g[0] = g[0] / norm_Of_g
g[1] = g[1] / norm_Of_g
g[2] = g[2] / norm_Of_g
那么倾角可以计算为
int inclination = (int) Math.round(Math.toDegrees(Math.acos(g[2])));
因此
if (inclination < 25 || inclination > 155)
{
// device is flat
}
else
{
// device is not flat
}
对于平放的情况,您必须使用指南针查看设备从起始位置旋转了多少。
对于不平的情况,旋转(倾斜)计算如下
int rotation = (int) Math.round(Math.toDegrees(Math.atan2(g[0], g[1])));
现在旋转 = 0 表示设备处于正常位置。对于大多数手机来说,这是没有任何倾斜的纵向,对于平板电脑来说可能是横向。因此,如果您如上图所示握住手机并开始旋转,则旋转会发生变化,当手机处于横向时,旋转将是 90 或 -90,具体取决于旋转方向。
关于android - 如何使用 Android 中的加速度计测量手机在 XY 平面上的倾斜度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11175599/