5

有没有办法从核心运动中获得相对旋转?

我需要的是:它在一个轴上旋转了多少以及哪个方向(+ 符号 = 逆时针,- = 顺时针,根据右手法则)。

我找到了属性rotationRate,但我现在确定如何从中提取角度,因为这给了我每秒弧度。

在过去的几天里,我做了各种各样的事情,但没有什么能给我稳定的价值观。我尝试使用 NSTimer 对核心运动数据进行定时采样并计算两个样本之间的差异,所以我会知道它自上一个样本以来旋转了多少,但有时它会给我疯狂的数字,比如 13600 度即使 iPhone 放在桌子上。

关于如何实现这一点的任何想法?

谢谢

4

2 回答 2

7

确实有。您可以通过深入了解 CMMotionManager 的属性通过CMDeviceMotion并最终了解CMAttitude来获得所需的内容。设备的姿态定义为:

物体相对于给定参考系的方向。

在 DeviceMotion 的 CMAttitude 的情况下,该参考框架由框架在启动设备运动更新时建立。从那个时间点开始,设备的姿态被报告为相对于该参考帧(而不是相对于前一帧)。

CMAttitude 类提供了一些方便的内置功能,可以将 CMAttitude 转换为实际有用的形式,例如欧拉角、旋转矩阵或四元数。您听起来像是在寻找欧拉角表示(俯仰、偏航、滚动)。

于 2011-02-20T00:27:22.717 回答
3

上面提供的答案不是很准确,但可能足以回答这个问题。Core Motion 始终尝试确定设备的绝对姿态,这意味着轴的定义可能会因设备的方向而异。例如,如果设备面朝上,则俯仰向上/向下是围绕 y 轴的旋转,但如果设备处于横向,则俯仰是围绕 z 轴(垂直于平面屏幕)。如果您的应用程序仅用于一个方向,或者您想要一个像所要求的问题一样的增量,这会有所帮助,但如果您想知道绝对方向,则它会变得过于复杂。

于 2011-09-07T20:25:15.297 回答