Ios 将世界坐标转换为对象坐标
iPhone陀螺仪接收相对于某个参考姿态的旋转数据,它不会改变(除非乘以)。比方说,我使用iPhone相机面对墙壁,向左旋转45度(Ios 将世界坐标转换为对象坐标,ios,math,geometry,linear-algebra,gyroscope,Ios,Math,Geometry,Linear Algebra,Gyroscope,iPhone陀螺仪接收相对于某个参考姿态的旋转数据,它不会改变(除非乘以)。比方说,我使用iPhone相机面对墙壁,向左旋转45度(roll+=PI/4) 现在,如果我将手机朝天花板方向提起,由于坐标空间是固定的(世界坐标空间,不随手机移动或旋转),偏航和俯仰都会发生变化。是否有方法确定此角度(地板平面和相机方向向量之间的角度)、滚动、偏航和俯仰 编辑:我将在这里尝试,而不是打开另一个问题。Luc的解决方案有效。但是如何得到另外两个旋转角度呢?我已经阅读了发布链接上的信息,但我学习线性代数已经好
roll+=PI/4
)
现在,如果我将手机朝天花板方向提起,由于坐标空间是固定的(世界坐标空间,不随手机移动或旋转),偏航和俯仰都会发生变化。是否有方法确定此角度(地板平面和相机方向向量之间的角度)、滚动、偏航和俯仰
编辑:我将在这里尝试,而不是打开另一个问题。Luc的解决方案有效。但是如何得到另外两个旋转角度呢?我已经阅读了发布链接上的信息,但我学习线性代数已经好几年了。实际上,这可能更像是一个数学问题,而不是一个编程问题。我并不是真的为iPhone编写代码,所以我会在“真实世界坐标”框架上信任你 在这种情况下,需要两个z轴矢量之间的点积。这会给出你要找的角度的余弦,非常接近。由于平面之间的角度只有在
0°
和90°
之间的值才有意义,因此实际上,您在该余弦中拥有所需的所有信息
这里没有latex格式,否则我会更详细一些,但如果你感兴趣,我会在这里包括最终结果,三次旋转的旋转矩阵:
现在,水平平面的z轴矢量是(0,0,1)
(将其作为垂直矢量读取)并随此矩阵旋转,您只需获得其第三列
所以我们想要在第三列和向量之间有点积,所以你得到了cos(β)cos(γ),也就是cos(俯仰)*cos(滚动)
总之,您的计划之间的角度是
arccos(俯仰)*cos(滚动))
。这个值会告诉你你的iPhone倾斜了多少,当然不是朝哪个方向。但是你可以从我们提到的向量(矩阵最右边的列)的值计算出来。听起来不正确。这些小型陀螺仪围绕固定在手机(而不是地球)上的轴测量旋转速率。我不确定他们是否会处理这些数据并为更高级别的数据提供API。这是我最初的想法。我把手机向上旋转了90度,它指向天花板,音高也在变化。返回,向左旋转90度,然后朝向天花板旋转,偏航发生了变化,而不是俯仰。我想实时确定地板和手机之间的任何角度。我只需要垂直角度,因为我正在使用openGL在屏幕上绘制一些东西,它们的位置基于手机的垂直角度,即地板平面和手机摄像头向量之间的角度。我不是旋转矩阵和向量方面的专家,但我完全理解为什么公式是arccos(俯仰)*cos(滚动))。虽然在某些位置我似乎遇到了万向节锁,或者类似的东西。解决我问题的公式是-sin(roll)*偏航+cos(roll)*俯仰。你帮了我大忙,没有你我解决不了。谢谢。实际上又遇到了类似的问题,你的配方很有魅力。非常感谢!