TYPE_LINEAR_ACCELERATION传感器值根据智能手机品牌型号而变化

aquia 发布于 4 天前 accelerometer 最后更新 4 天前 1 浏览

我前两天在Google Play商店发布了一款使用运动传感器的游戏。这款游戏是一款拳击手游戏,允许用户在摇晃智能手机分数时自动评估。为了评估分数,它使用TYPE_LINEAR_ACCELERATION传感器。 但问题出现在我发布游戏后,一些用户发送了他们的分数。我发现对于一些智能手机来说,很容易获得900分,对于某些智能手机来说很难获得500分。我的意思是,如果同一个用户在这个游戏中动摇(用同样的力量)不同的手机;对于X智能手机,他获得(例如)400分,对于Y智能手机获得(例如)850分。 为什么这种不平等会发生? 我了解(猜测)某些智能手机评估得分较低,当一些智能手机评估得分较高时。 我的实现(大致)

    sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), SensorManager.SENSOR_DELAY_FASTEST);
-
@Override
        public void onSensorChanged(SensorEvent event) {
            if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
                float[] values = event.values;
                 float x = values[0];//to get X - axis acceleration   
                  //.......
//........
    }
    }
我可以分享我的申请链接,但是允许吗?如果是,请说。我可以分享我的应用程序链接。 注意:我想解释我的算法,得到分数,我从传感器获得最大加速度,并将最大值保留在变量中。用户点击显示分数按钮后,我乘以40并获得分数。
已邀请:

lsunt

赞同来自:

您还没有描述如何计算分数。 我会对3维进行平方根计算,然后使用结果(磁性)作为分数

score = getMagnetude(values);
和功能:
private float getMagnetude(float[] v) {
        return Math.sqrt( v[0]*v[0] + v[1]*v[1] + v[2]*v[2] );
}

wquod

赞同来自:

我理解我的问题。我正在使用Sensor.TYPE_LINEAR_ACCELERATION,因此它使用陀螺仪+加速计传感器。 TYPE_LINEAR_ACCELERATION传感器的操作逻辑是什么? 它使用加速度计和陀螺仪传感器。它有一个公式: 线性加速度= k1 x加速度计+ k2 xgyroscope k1和k2是常数值。 对于陀螺仪,没有任何最大值(我认为),但对于加速计传感器,不同的智能手机使用不同的最大值。 这些最大值为 - + g(9.8), - + 2g, - + 4g和 - + 8g。 最后,对于不同的智能手机,会显示不同的结果,因为用户在摇动智能手机时通常会达到最大值。

oest

赞同来自:

我不懂你的问题。 Type_Linear_Acceleration是一个虚拟传感器,它从加速度计和陀螺仪的数据组合中获取数据。 大多数智能手机加速度计和陀螺仪没有完全相同的传感器,显然每台设备之间的数据会略有不同。