Java 计算垂直跳跃空气时间

Java 计算垂直跳跃空气时间,java,android,accelerometer,android-sensors,gyroscope,Java,Android,Accelerometer,Android Sensors,Gyroscope,你好,我正在使用一个计算你跳了多少次的应用程序,我正在使用这个应用程序的陀螺仪来计算你跳的次数。但atm的问题是,当我稍微移动设备时,它会被视为跳转,而这不是我想要的。我想要它,当它达到某个高度时,它将被视为一次跳跃 int count = 0; public void onSensorChanged(SensorEvent event) { double d = Math.round(Math.sqrt(Math.pow(2, event.values[0]) + Math.pow(2

你好,我正在使用一个计算你跳了多少次的应用程序,我正在使用这个应用程序的陀螺仪来计算你跳的次数。但atm的问题是,当我稍微移动设备时,它会被视为跳转,而这不是我想要的。我想要它,当它达到某个高度时,它将被视为一次跳跃

int count = 0;
public void onSensorChanged(SensorEvent event) {
    double d = Math.round(Math.sqrt(Math.pow(2, event.values[0]) + Math.pow(2, event.values[1]) + Math.pow(2, event.values[2])) - 2);
    String result ="";

    if(d != 0){
        count++;
        result = String.valueOf(d/100.0);
    }
    text.setText("jump counts" + " " + count);
    text.invalidate();
    Log.i("Gyro", result);
}

如果陀螺仪返回的距离大于或等于该阈值,则可以引入一个阈值来计算跳跃

int count = 0;

    public void onSensorChanged(SensorEvent event) {
        double d = Math.round(Math.sqrt(Math.pow(2, event.values[0]) + Math.pow(2, event.values[1]) + Math.pow(2, event.values[2])) - 2);
        String result ="";
        SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context);

        float threshold=preferences.getFloat(KEY,defaulttValue)
        if(d != 0 && d>=threshold){
            count++;
            result = String.valueOf(d/100.0);
        }
        text.setText("jump counts" + " " + count);
        text.invalidate();
        Log.i("Gyro", result);
    }

此阈值可由用户校准,存储在共享首选项中,以便以后修改。

1。不要用陀螺仪。陀螺仪是用来测量旋转的。使用加速计。2.如果您检查是否有任何变化(
d!=0
),它将捕捉到任何大于传感器精度的运动。@StenSoft我用加速度计测试了它,只使用了Y,在每次震动时,它将被视为跳跃,但有时需要更多的跳跃计数。加速度计测量加速度(
TYPE\u LINEAR\u ACCELERATION
LINEAR这是您想要的,以及
TYPE\u accelerator
整体包括重力,您可能希望将重力用于旧设备作为备用)。您还需要时间来获得距离。您需要将其与阈值进行比较,以排除小的(非跳跃)更改。我测试了你的代码,效果很好,但现在的问题是,当我摇动手机示例时,你是如何搞砸一些东西或喜欢平衡(左右)它算作跳跃不知道我是否可以禁用它或降低它的意义。也许你可以检查线性加速度并只测量Y轴的变化,放弃算作向左或向右移动的X轴值。查看此链接了解更多信息