【发布时间】:2012-10-23 11:58:47
【问题描述】:
我正在开发一个需要检测垂直运动的 Android 应用。向上移动平板电脑时,陀螺仪、加速度计和线性加速度传感器会给出相应的值来指示向上或向下运动。
我遇到的问题是,当您将平板电脑向用户倾斜或远离用户倾斜时,这些传感器也会读取向上/向下的运动。例如,陀螺仪中的 x 值代表垂直平面。但是当您将设备向前倾斜时,x 值会发生变化。 当我做出这个动作时,读取垂直运动的同一个传感器会为此读取一个值。
其他传感器也是如此。我尝试使用与陀螺仪结合的方向来制作条件语句,如果音高没有变化,但 x 变量向上/向下,那么我们有垂直运动。这样做的问题是,如果用户将其向上移动但稍微倾斜,它将不再起作用。我也尝试过这样做,所以如果倾斜发生变化,那么就没有垂直运动。但它迭代得如此之快,以至于 1/100 秒的倾斜度可能会发生变化,但下一秒则没有。
有什么方法可以让我只读取垂直变化而不读取设备间距的变化?
编辑:
“请对你认为的‘向上移动’提出一个数学上合理的定义。” 这是我最初的问题,我如何编写一个函数来定义平板电脑何时向上或向下移动?我考虑向上移动的垂直平移。现在我该如何检测呢?我根本不知道从哪里开始,谢谢。
【问题讨论】:
-
当用户倾斜平板电脑时,会出现向上/向下运动。如果您想要在平板电脑保持垂直时检测移动,那么只有在平板电脑从 90º(+-10º 或您想要提供的任何边距)倾斜时才寻找垂直移动。
-
但如果平板电脑向上移动,但倾斜,那么将没有注册的移动。此外,+-10 度足以影响垂直运动的值。这是我最后的解决方案,我想要更好更可靠的解决方案。
-
我看到了你的未来。如果用户将平板电脑向前倾斜 90 度(平行于地平线)并在其自己的垂直轴上移动平板电脑(向前/远离用户)会发生什么?如果平板电脑对左撇子来说是“颠倒的”,会发生什么?如果平板电脑保持在 70 度或有点歪斜,会发生什么?所有这些条件以及更多条件都会影响“垂直”读数。上/下运动不仅仅是上/下运动。要在所有/大多数情况下正常工作,需要非常仔细的设计。
-
我也考虑过其中一些事情。我正在使用此动作来控制相机,因此平板电脑将始终面向用户。我确实认为有一种方法可以使用矢量和触发来实现垂直运动,但我无法进行这些计算。
-
您可以尝试计算给定时间内每个轴的增量。当垂直轴连续 N 个比其他轴更大的增量增加时,您可以假设垂直移动。
标签: android accelerometer gyroscope motion tilt