有没有办法从核心运动中获得相对旋转?
我需要的是:它在一个轴和哪个方向上旋转了多少(+符号=逆时针, - =顺时针,根据右手规则)。
我找到了属性rotationRate,但我现在确定如何从中提取角度,因为这给了我每秒弧度。
我在最后几天做过各种各样的事情,但没有什么能给我稳定的价值观。我曾尝试使用NSTimer进行核心运动数据的定时采样并计算两个样本之间的差异,因此我会调整自上次采样以来旋转的数量,但有时会给我疯狂的数字,如13600度即使iPhone搁在桌子上也是如此。
有关如何实现这一点的任何想法?
感谢
答案 0 :(得分:7)
身体的方向相对于 给定的参考框架。
对于DeviceMotion的CMAttitude,该框架在启动设备运动更新时由框架建立。从那个时间点开始,相对于该参考系报告设备的姿态(不是相对于前一帧)。
CMAttitude类提供了一些方便的内置功能,可将CMAttitude转换为实际上对某些内容有用的形式,如Euler Angles,旋转矩阵或四元数。你听起来像是在寻找欧拉角表示(Pitch,Yaw,Roll)。
答案 1 :(得分:3)
上面提供的答案不太准确,尽管回答这个问题可能已经足够了。 Core Motion会一直尝试确定设备的绝对姿态,这意味着轴的定义可能会因设备的方向而异。例如,如果设备是面朝上的,那么俯仰/俯仰是围绕y轴的旋转,但是如果设备处于横向方向,则俯仰是围绕z轴的旋转(垂直于平面屏幕)。如果您的应用程序仅用于一个方向,或者您想要一个像所要求的问题一样的delta,但如果您想知道绝对方向,则会使其过于复杂。