2012-11-08 153 views
4

iPhone的陀螺仪接收数据相对旋转到一定的参考态度并没有改变(除非倍增。)可以说,我的脸用我的iPhone摄像头墙,左右旋转45度(roll += PI/4)。转换世界物体坐标

现在,如果我将手机抬向天花板,由于坐标空间是固定的(世界坐标空间,不会随手机移动或旋转),偏航和俯仰都会改变。是否有方法可以确定此角度(地平面和摄像机方向矢量之间的那个),滚动,偏航和俯仰?

编辑:不是打开另一个问题,我会尽力在这里的。 Luc的解决方案有效。但如何获得另外两个旋转角度?我已经阅读了发布的链接上的信息,但自从我学习线性代数以来已经有数年了。实际上,这可能比编程问题更重要。

+0

这听起来并不正确。这些小陀螺仪测量固定在手机上的轴(而不是地球)的旋转速率。不确定他们是否处理该数据,并为某些更高级别的数据提供API。 – phkahler

+0

这就是我最初的想法。我把手机旋转了90度,所以它指向天花板,音高也在变化。往回走,向左旋转90度,朝天花板旋转,偏航改变而不是俯仰。 – Mercurial

+0

我想要在任何时候实时确定地面飞机和手机之间的角度。我只需要垂直角度,因为我使用openGL在屏幕上绘制了一些东西,它们的位置基于手机的垂直角度,即地平面和手机相机矢量之间的垂直角度。 – Mercurial

回答

2

我真的不代码为iPhone,所以我会相信你的“真实世界坐标”框架。

在这种情况下,你希望两个z轴向量之间的点积。这会给你你正在寻找的角度的余弦,因此非常接近。由于平面之间的夹角只有真正有意义的,因为90°之间的值,你确实有你在余弦需要的所有信息。

此处没有胶乳格式,否则我会进入更多细节,但是如果您有兴趣,我会在最后的结果中包含您的三次旋转的旋转矩阵: rotation matrix

现在水平计划的z轴矢量是(0,0,1)(读此为垂直矢量虽然),并用该矩阵旋转,只需获得其第三列。

所以我们希望有第三列,我们(0,0,1)向量的内积,所以你得到cos(β)cos(γ)这是cos(pitch)*cos(roll)

总之,你的计划之间的角度是arccos(cos(pitch)*cos(roll))。这个值会告诉你你的iPhone倾向于多少,而不是朝哪个方向倾斜。但是你可以从我们所说的矢量(矩阵的最右边一列)的值中解决这个问题。

+0

我不是旋转矩阵和矢量的专家,但我完全明白为什么公式是arccos(cos(pitch)* cos(roll))。虽然它在某些位置上看起来像是遇到了一个万向节锁,或者看起来像是这样。解决我问题的公式是-sin(roll)* yaw + cos(roll)* pitch。你真的很有帮助,没有你我就不会解决它。谢谢。 – Mercurial

+0

实际上又遇到过类似的问题,你的配方就像魅力一样。谢谢一堆! – Mercurial

相关问题