Spa*_*Dog 34 iphone core-motion
我正试图理解这一点,试图在墙上敲我的头.见下图.
假设我有一张iPhone放在桌子上.此时,通过核心运动的旋转读数对于偏航,滚动和俯仰是0,0,0(图片A).
然后我将它滚动90度.现在它坐在桌子上,左侧是主页按钮.现在它读取0,0,0(图片B).
现在我把它偏转了180度.它现在坐在桌子右侧.左侧的主页按钮.它现在读取180,0,0(图片C).
如果我现在滚动它就会出现问题.假设我将它滚动-45度.我应该读180,-45,0但我正在读180,-45,180 ???? (图片D).
这是为什么?如果我从来没有改变过它,为什么它给我一个音高价值呢?如何通过其他角度的旋转来影响音高?谢谢.
鉴于您可以使用增量移动,您可以使用"四元数差异"操作.假设你有一个先前的旋转作为四元数称为q1和当前的q2.然后,您可以计算它们之间的delta dQ,以便q2 = q1*dQ有效.你所要做的就是构建q1的逆(q1 ^( - 1)),然后得到:
dQ = q1 ^( - 1)*q2
如果deviceMotionInterval足够高,你总是有方便的小欧拉角,没有任何90°奇点或其他beasty东西.由于错误传播和虚拟空间缺乏反馈,此解决方案的可能缺点可能是轻微漂移.示例:如果您将iPhone放在显示立方体的工作台上,然后执行一系列旋转,则当您将手机放回到起始位置时,可能会发现立方体的角位移.
[编辑:忘了一些部分]为了摆脱漂移效果,你"只"需要一种方法来表达你的最后一个对象的真实位置(q1)作为四元数,即屏幕上显示的应用程序中的坐标.如果您使用像Unity这样的工具,它可能只是读取对象的相应属性.如果您无法轻松访问它,则可以手动跟踪此位置.
如果你想了解更多有关这方面的内容,请参阅Fletcher Dunn,Ian Parberry第168页的3D数学入门图形和游戏开发.
归档时间: |
|
查看次数: |
10525 次 |
最近记录: |