如何在 Swift 中测量 iOS 设备上的抖动量?

Posted

技术标签:

【中文标题】如何在 Swift 中测量 iOS 设备上的抖动量?【英文标题】:How To Measure Amount Of Shake On iOS Device In Swift? 【发布时间】:2017-10-05 20:45:46 【问题描述】:

我正在使用 CoreMotion 在应用中获取设备运动测量结果。我可以得到加速度 x y z、滚动、俯仰、偏航、陀螺仪数据等。

但我要测量的是抖动,即设备移动了多少,并为设备在任何方向上大量移动时设置阈值。我发现我得到的测量结果非常敏感,我不知道如何正确使用它。

注意:我知道如何检测摇晃手势,但这不是我要问的 - 我要的是正确的方法来测量摇晃的量并显示它。

我在 DeviceMotion 中使用的代码示例:

        if let deviceMotion = motionManager.deviceMotion 
        let quat = deviceMotion.attitude.quaternion;
        var qRoll = radiansToDegrees(radians: atan2(2*(quat.y*quat.w - quat.x*quat.z), 1 - 2*quat.y*quat.y - 2*quat.z*quat.z)) ;
        var qPitch = radiansToDegrees(radians: atan2(2*(quat.x*quat.w + quat.y*quat.z), 1 - 2*quat.x*quat.x - 2*quat.z*quat.z));
        var qYaw = radiansToDegrees(radians: asin(2*quat.x*quat.y + 2*quat.w*quat.z));

        let orientation = deviceMotion.attitude
        var roll = radiansToDegrees(radians: orientation.roll)
        var pitch = radiansToDegrees(radians: orientation.pitch)
        var yaw = radiansToDegrees(radians: orientation.yaw)

并使用加速度计:

        if motionManager.isAccelerometerAvailable 
        motionManager.startAccelerometerUpdates(to: OperationQueue.current!, withHandler:  accelerometerData, error in
            if let acceleration = accelerometerData?.acceleration 
                print("ACCELEROMETER X: " + acceleration.x.description)
                print("ACCELEROMETER Y: " + acceleration.y.description)
                print("ACCELEROMETER Z: " + acceleration.z.description)
        )
    

使用 CoreMotion 的测量值来测量设备抖动程度的正确方法是什么?

【问题讨论】:

你的用例是什么? 一些,但我的兴趣是更多地了解 CoreMotion 以及如何测量抖动,但一个用例是将设备放在物体上并测量它的抖动程度。 【参考方案1】:

这取决于您的具体用例,但如果您想确定抖动量,请计算运动增量。确定给定时间段内设备运动属性之一的最大值和最小值,并将该值用作“抖动”的近似值。

例如,您可以在 5 秒内测量设备的yaw。跟踪最小值和最大值,并获取它们之间的差异。更多的摇晃会导致更大的值。

同样,这取决于您的具体用例,但您也可以结合使用设备运动属性及其运动增量。如果您知道随着时间的推移运动是一致的(就像机器来回摇晃),您可以尝试找到局部最小值/最大值并在一段时间内对其进行平均。

【讨论】:

我不认为它是特定于用例的。从地震仪到测量机器振动的任何用例都需要计算在设备的任何位置(即面朝下、面朝上、在其底部的一侧)测量到的运动量。我看到返回的值非常敏感,即使手机根本没有移动,值也会有很多闪烁。

以上是关于如何在 Swift 中测量 iOS 设备上的抖动量?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Unity3D 检测移动设备上的抖动运动? C#

gps如何测量面积实例

渐变不覆盖 iphone plus 设备上的图像 ios swift 3

确定 iOS 设备上的可用 RAM 量

Swift:监听 iOS 设备上的物理按钮向上/向下事件

如何在真实设备上的 iOS 10 中将渐变应用到 UIView