我们可以从CMAcceleration
检索加速度数据。
它提供3个值,即x
,y
和z
。
我一直在阅读这篇文章,似乎对这些价值观有不同的解释。
有人说它们是重力的加速度值。
其他人说它们不是,它们是轴在轴上转动时的加速度值。
这是哪个版本正确?例如,x
表示pitch
的加速率或从左到右表示加速率吗?
另外,如果我们想要获得yaw
的加速率(多快),那么当回调给我们不断提供值时,我们怎么能够得到该值?我们需要为计算设置另一个计时器吗?
修改 (以响应@Kay):
是的,基本上就是这样 - 我只想确保x, y, z
和pitch, roll and yaw
分别用框架表示。
1。)
这些在某些情况下如何相关?是否需要除了获取值之外,例如yaw
需要使用x, y, z
的其他信息?
2。)
你能解释一下这个:
(deviceMotion.rotationRate.z - previousRotationRateZ) / (currentTime - previousTime)
我们是否需要使用计时器作为时间值?如何利用上述内容生成角加速度?我认为角加速需要更复杂的数学。
3。)
在现实世界的情况下,我们几乎不能只依赖pitch, roll and yaw
中的单个值,因为我们无法在一个轴上进行 旋转(我们的手)不是那么“稳定”。特别是在喝了5杯咖啡之后......)
假设我想得到yaw
的值(是的, z轴上的旋转),但当yaw
旋转时,我想查看它针对pitch
( x轴)。
是的,这里有两个动作组合在一起(想象一下手机围绕 z 旋转,轻微的移动朝向和离开用户的脸部)。
所以: 是否有数学模型(或根据您个人经验的模型)从计算不同轴的值中获取值? ( 示例案例 :如果用户在z轴上旋转并且同时也在进行x轴运动 - 很好。如果不是,那么运动不好我们需要)。样品盒就在我头顶。
我希望上面的yaw
和pitch
样本案例对您有意义。如果没有,请随意引用更好的用例进行解释。
4。)
最后一次。我们如何才能将时间作为参考框架来检查自上次运动以来运动的速度?我们应该提供一个公差(例如:“自上次运动以来不到1/50秒 - 做一些事情。如果没有,什么也不做。”)?我们在何时何地设置计时器?
答案 0 :(得分:1)
CMAccelerometerData的课程参考说:
G轴的X轴加速度(重力)
加速度以局部坐标测量,如figure 4-1 in the Event Handling Guide所示。它始终是一个平移,不能与以角度测量的径向或圆周运动相混淆。
无论如何,即使是恒定的角速度,每次旋转都与方向的变化有关,因此也会报告加速度。 Circular Motion
你是什么意思得到偏航的加速度(多快)?
根据Handling Rotation Rate Data中的图4-2,绕Z轴发生偏航旋转。这意味着在X,Y平面上存在连续的线性加速度。如果你对角加速感兴趣,你需要取CMDeviceMotion.rotationRate并除以时间增量,例如:
(deviceMotion.rotationRate.z - previousRotationRateZ) / (currentTime - previousTime)
<强>更新强>
这取决于您想要做什么以及您有兴趣跟踪哪些动作。我希望你不想在翻译时获得x,y,z中的确切设备位置,因为这是不可能的。当然,可以非常好地确定方向,即相对于g的旋转。