将世界转换为对象坐标

时间:2012-11-08 16:51:59

标签: ios math geometry linear-algebra gyroscope

iPhone陀螺仪接收相对于某些参考姿态的旋转数据并且它不会改变(除非相乘。)假设我使用我的iPhone相机面向墙壁,并向左旋转45度(roll += PI/4。)< / p>

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

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

1 个答案:

答案 0 :(得分:2)

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

在这种情况下,您需要两个z轴'向量之间的点积。这将给你你正在寻找的角度的余弦,因此非常接近。由于平面之间的角度仅作为90°之间的值才有意义,因此您实际上拥有了该余弦所需的所有信息。

这里没有乳胶格式,否则我会详细介绍一下,但read this page如果你有兴趣,我会在这里包括最终结果,你的旋转矩阵三个轮换: rotation matrix

现在,水平平面的z轴向量为(0,0,1)(尽管将其读作垂直向量)并使用此矩阵旋转,您只需获得第三列。

所以我们希望在第三列和我们的(0,0,1)向量之间加上点积,这样就得到cos(β)cos(γ) cos(pitch)*cos(roll)

总之,您的计划之间的角度为arccos(cos(pitch)*cos(roll))。这个值会告诉你iPhone的倾向程度,当然不是在哪个方向。但是你可以从我们谈到的向量值(矩阵的最右边的列)中解决这个问题。