iPhone - 核心运动(相对旋转)

5
有没有一种方法可以从核心运动中获取相对旋转?
我需要知道它在一个轴上旋转了多少以及旋转方向(+表示逆时针,-表示顺时针,根据右手定则)。
我已经找到了rotationRate属性,但是我不确定如何从中提取角度,因为这给出的是每秒弧度。
我已经尝试过各种方法,但是没有什么能给我稳定的值。我尝试使用NSTimer对核心运动数据进行定时采样,并计算两个样本之间的差异,以便我知道自上次采样以来它旋转了多少,但有时候它会给我一些疯狂的数字,比如13600度,即使iPhone静置在桌子上。
有没有想法如何实现这一点?
谢谢
2个回答

7
确实有这样的方法。您可以通过深入研究CMMotionManager的属性,通过CMDeviceMotion最终到达CMAttitude。设备的姿态定义为:

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

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

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


3
上面提供的答案并不十分准确,虽然可能足以回答这个问题。Core Motion试图在任何时候确定设备的绝对姿态,这意味着轴的定义可以根据设备的方向变化。例如,如果设备朝上,则俯仰上/下是围绕y轴的旋转,但如果设备处于横向方向,则俯仰是围绕z轴(垂直于屏幕平面)的旋转。如果您的应用程序只在一个方向中使用,或者您想要像问题所问的那样得到一个增量,这可能有所帮助,但如果您想知道绝对方向,则会使其过于复杂。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接