iphone - 检测到设备移动
<p><p>我正在为 iPhone 创建运动检测警报。该警报将通过按下“激活”按钮来设置,并在一个小的倒计时后,将读取它是否正在移动。我曾尝试使用加速度计来检测运动,但如果阈值变得太低,它会不断激活,无论设备是否在移动。如果我将阈值设置得更高,它不会检测到运动,只会检测特定的运动速度。</p>
<p>有没有人有任何关于如何正确执行此操作的解决方案,不是通过力量,而是手机是否真的移动了。 </p>
<p>我试图找到如何实现它的在线示例,但只提出了增强现实和 OpenGL 等的解决方案。我只需要一个简单的运动检测。</p>
<p>感谢您的帮助!</p>
<p>编辑:</p>
<p>我设法使用 Apple 文档中的一些示例使其正常工作。</p>
<p>我已经设法使用这个加速度计 didAccelerate 方法实现了我想要的:</p>
<pre><code>- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
// Use a basic low-pass filter to keep only the gravity component of each axis.
accelX = (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor));
accelY = (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor));
accelZ = (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor));
float accelerationThreshold = 1.01; // or whatever is appropriate - play around with different values
if (fabs(accelX) > accelerationThreshold || fabs(accelY) > accelerationThreshold || fabs(accelZ) > accelerationThreshold) {
;
accelX = accelY = accelZ = 0;
accelerometerActive = NO;
accelerometer.delegate = nil;
accelerometer = nil;
}
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>一种方法是计算重力矢量。如果手机没有移动,那么矢量将保持相当恒定。如果拿起手机,手机的方向可能会发生变化,因此重力矢量也会发生变化(相对于加速度计的方向)。</p>
<p>要检测运动,只需计算“激活”上设置的原始向量与当前向量之间的角度。谷歌搜索<a href="http://www.google.co.uk/search?q=angles%20between%203d%20vectors&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla%3aen-GB%3aofficial&client=firefox-a" rel="noreferrer noopener nofollow">angles between 3d vectors</a>将帮助您解决这背后的数学问题。</p>
<p>理论上有人可以拿起电话并保持准确的方向,但这极不可能。</p>
<p>希望这会有所帮助,祝你好运。</p></p>
<p style="font-size: 20px;">关于iphone - 检测到设备移动,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/8508090/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/8508090/
</a>
</p>
页:
[1]