发布于 2017-05-26 10:22:22
这实际上比你想象的要困难得多。
手机的陀螺仪传感器给你手机的移动相对于手机,而不是世界。把手机正面朝上,平躺在桌子上会让你
x = 0.0,y = 0.0,z = -9.8。由于传感器的作用,这些数值会有轻微的波动。当手机旋转时,这些基本(静止)值会发生变化--在45度时。
x = 6.93,y = 0,z = 6.93,所以sqrt(x*x + y*y + z*z) = 9.8。如果你想隔离上下移动,你要么停止手机旋转,要么忽略这个移动。
如果你停止手机旋转--例如,手机必须直立放在口袋里,那么你只需看一下x组件,它会在休息时读取-9.81,而变化会显示加速,较小的负值或正的向上,在向下的方向上会显示更多的负值。
如果您希望忽略其他移动(例如,用户只将此用于定义的活动),则绝对值即可。sqrt(x*x + y*y + z*z)将在休息时为您提供9.8,而对该值的更改将由设备加速所致。稍后再学一点数学(蛮力的数值积分),你就可以有速度或距离的旅行(尽管注意到这很快就会变得非常不准确……)
注意,有一个旋转矢量传感器 API可能允许您从陀螺仪读数中移除设备的方向,允许您计算真实世界的运动,但是我还没有尝试过这个API,并且不知道需要什么额外的硬件(如果有的话)。
https://stackoverflow.com/questions/44180739
复制相似问题