Java 计算垂直跳跃空气时间
你好,我正在使用一个计算你跳了多少次的应用程序,我正在使用这个应用程序的陀螺仪来计算你跳的次数。但atm的问题是,当我稍微移动设备时,它会被视为跳转,而这不是我想要的。我想要它,当它达到某个高度时,它将被视为一次跳跃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
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轴值。查看此链接了解更多信息