iphone - 核心动作(相对旋转)

时间:2011-02-19 21:57:10

标签: iphone core-motion

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

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

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

我在最后几天做过各种各样的事情,但没有什么能给我稳定的价值观。我曾尝试使用NSTimer进行核心运动数据的定时采样并计算两个样本之间的差异,因此我会调整自上次采样以来旋转的数量,但有时会给我疯狂的数字,如13600度即使iPhone搁在桌子上也是如此。

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

感谢

2 个答案:

答案 0 :(得分:7)

确实有。您可以深入查看CMMotionManagerCMDeviceMotion,最后到CMAttitude的属性,从而获得所需内容。设备的态度定义为:

  

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

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

CMAttitude类提供了一些方便的内置功能,可将CMAttitude转换为实际上对某些内容有用的形式,如Euler Angles,旋转矩阵或四元数。你听起来像是在寻找欧拉角表示(Pitch,Yaw,Roll)。

答案 1 :(得分:3)

上面提供的答案不太准确,尽管回答这个问题可能已经足够了。 Core Motion会一直尝试确定设备的绝对姿态,这意味着轴的定义可能会因设备的方向而异。例如,如果设备是面朝上的,那么俯仰/俯仰是围绕y轴的旋转,但是如果设备处于横向方向,则俯仰是围绕z轴的旋转(垂直于平面屏幕)。如果您的应用程序仅用于一个方向,或者您想要一个像所要求的问题一样的delta,但如果您想知道绝对方向,则会使其过于复杂。