我一直试图理解Core Motion,感觉我失败了。
我不是工程师,也不是数学家,所以旋转矩阵和欧拉角等(对于我来说)来说是一个难以理解的概念。
我正在尝试编写一款可以计算iPhone旋转角度的应用。基本上,我正试图测量一个人的肘部的运动范围。
我已经完成了一些不同的测试项目,看起来正确的方法是使用CMAttitude
框架中的Core Motion
个实例。
当我开始要求运动数据时,我甚至已经理解了(有点)了解参考框架,并使用multipleByInverseOfAttitude:
来确定态度的净变化(我是否正确地说明了这一点? )。
我不明白的是 DO 与计算出的CMAttitude
有什么关系。假设用户手中拿着iPhone,开始测量并弯曲他们的手臂,使他们的肘部从伸展(180º)塌陷到塌陷(比如说45º)。根据他们握住设备的方式,我似乎可以得到非常非常不同的计算态度。
在另一种情况下,假设用户手持iPhone掌上电脑。然后,在不移动他们的手臂(手机保持“就位”)的情况下,他们将手掌向下旋转。显然,这就像180º旋转。
现在,在上述两种情况下,如果我能保证用户如何保持设备启动,我想我可以弄清楚如何进行测量。对于肘部,我可以让他们按住设备“向上/屏幕左侧”,这意味着偏航测量将给我我寻求的答案。
对于手腕旋转,如果用户从手机“屏幕上/右上角”开始,那么我可以将音高隔离为我的测量值。
我想找到的是一种更通用的方法来找到任意两种态度之间的共同旋转角度(或者,从单一的,计算的“三角洲”态度)。
我是否正确地想到了这一点?
如果您要回复高级数学,请给我资源或简单的解释。我不介意阅读这个主题,但我在其他问题上看到的一些与此相关的答案非常密集,我甚至不知道从哪里开始。
<小时/> 的 修改
在过去的几个小时里,我一直在阅读这篇文章,我有一个想法,但是想要在这个问题上有更多经验的人来管理它。我也一直在进行设备上的实验,并在音高范围的边缘经历万向节锁定,并在滚动范围的边缘经历奇怪的事情。
因此,据我所知,CMAttitude
实例代表了iPhone在三维空间中的位置。可以要求它以欧拉角(俯仰,滚转,偏航)或四元数(x,y,z,w)表示自己。
如果是这样,为了我的目的,我可以计算2个四元数向量(x1,y1,z1)与(x2,y2,z3)之间的角度,并将其与w1和w2之间的差值进行比较吗?如果矢量之间的差异角度足够小,那么“w”旋转之间的差异不会是我所寻求的吗?这是否有意义,还是我错过了四元数的本质?