Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将世界坐标转换为对象坐标_Ios_Math_Geometry_Linear Algebra_Gyroscope - Fatal编程技术网

Ios 将世界坐标转换为对象坐标

Ios 将世界坐标转换为对象坐标,ios,math,geometry,linear-algebra,gyroscope,Ios,Math,Geometry,Linear Algebra,Gyroscope,iPhone陀螺仪接收相对于某个参考姿态的旋转数据,它不会改变(除非乘以)。比方说,我使用iPhone相机面对墙壁,向左旋转45度(roll+=PI/4) 现在,如果我将手机朝天花板方向提起,由于坐标空间是固定的(世界坐标空间,不随手机移动或旋转),偏航和俯仰都会发生变化。是否有方法确定此角度(地板平面和相机方向向量之间的角度)、滚动、偏航和俯仰 编辑:我将在这里尝试,而不是打开另一个问题。Luc的解决方案有效。但是如何得到另外两个旋转角度呢?我已经阅读了发布链接上的信息,但我学习线性代数已经好

iPhone陀螺仪接收相对于某个参考姿态的旋转数据,它不会改变(除非乘以)。比方说,我使用iPhone相机面对墙壁,向左旋转45度(
roll+=PI/4

现在,如果我将手机朝天花板方向提起,由于坐标空间是固定的(世界坐标空间,不随手机移动或旋转),偏航和俯仰都会发生变化。是否有方法确定此角度(地板平面和相机方向向量之间的角度)、滚动、偏航和俯仰


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

我并不是真的为iPhone编写代码,所以我会在“真实世界坐标”框架上信任你

在这种情况下,需要两个z轴矢量之间的点积。这会给出你要找的角度的余弦,非常接近。由于平面之间的角度只有在
90°
之间的值才有意义,因此实际上,您在该余弦中拥有所需的所有信息

这里没有latex格式,否则我会更详细一些,但如果你感兴趣,我会在这里包括最终结果,三次旋转的旋转矩阵:

现在,水平平面的z轴矢量是
(0,0,1)
(将其作为垂直矢量读取)并随此矩阵旋转,您只需获得其第三列

所以我们想要在第三列和向量之间有点积,所以你得到了cos(β)cos(γ),也就是
cos(俯仰)*cos(滚动)


总之,您的计划之间的角度是
arccos(俯仰)*cos(滚动))
。这个值会告诉你你的iPhone倾斜了多少,当然不是朝哪个方向。但是你可以从我们提到的向量(矩阵最右边的列)的值计算出来。

听起来不正确。这些小型陀螺仪围绕固定在手机(而不是地球)上的轴测量旋转速率。我不确定他们是否会处理这些数据并为更高级别的数据提供API。这是我最初的想法。我把手机向上旋转了90度,它指向天花板,音高也在变化。返回,向左旋转90度,然后朝向天花板旋转,偏航发生了变化,而不是俯仰。我想实时确定地板和手机之间的任何角度。我只需要垂直角度,因为我正在使用openGL在屏幕上绘制一些东西,它们的位置基于手机的垂直角度,即地板平面和手机摄像头向量之间的角度。我不是旋转矩阵和向量方面的专家,但我完全理解为什么公式是arccos(俯仰)*cos(滚动))。虽然在某些位置我似乎遇到了万向节锁,或者类似的东西。解决我问题的公式是-sin(roll)*偏航+cos(roll)*俯仰。你帮了我大忙,没有你我解决不了。谢谢。实际上又遇到了类似的问题,你的配方很有魅力。非常感谢!