iOS设备的Euler角度到旋转矩阵手动转换 以下是问题的小背景和介绍:
我的基于运动和位置的iOS应用程序中有一些功能,它需要一个旋转矩阵作为输入。某些图形输出依赖于此矩阵。随着设备的每次移动,图形输出都会发生变化。这是代码的一部分,它使:iOS设备的Euler角度到旋转矩阵手动转换 以下是问题的小背景和介绍:,ios,objective-c,transformation,rotational-matrices,euler-angles,Ios,Objective C,Transformation,Rotational Matrices,Euler Angles,我的基于运动和位置的iOS应用程序中有一些功能,它需要一个旋转矩阵作为输入。某些图形输出依赖于此矩阵。随着设备的每次移动,图形输出都会发生变化。这是代码的一部分,它使: [motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical toQueue:mot
[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical
toQueue:motionQueue
withHandler:
^(CMDeviceMotion* motion, NSError* error){
//get and process matrix data
}
在此结构中,只有4个框架可用:
XArbitraryZVertical
XArbitraryCorrectedZVertical
X磁学北零度
北零度角
我需要另一个参考,f.e.陀螺仪值,而不是North,这些帧不能提供我想要的
为了达到我的目标,我使用下一个结构:
[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical
toQueue:motionQueue
withHandler:
^(CMDeviceMotion* motion, NSError* error){
//get Euler angles and transform it to rotation matrix
}
你可能会问我,为什么我不使用内置旋转矩阵?答案很简单。我需要做一些自己的参考框架,我可以通过把修改后的角度值放进去来做
问题是:
为了从欧拉角得到旋转矩阵,我们需要为每个角生成矩阵,然后将它们相乘。对于3D情况,我们将为每个轴(其中3个)提供矩阵。然后我们乘矩阵。问题是输出取决于乘法的顺序。XYZ不等于ZYX。告诉我,有12种变体,我不知道哪一种是适合iOS实现的。我需要知道我需要按什么顺序乘以它们。此外,我需要知道哪些角度代表X,Y,Z。例如,X-滚动,Y-俯仰,Z-偏航
事实上,这个问题几年前就被苹果解决了,但我没有访问.m文件的权限,我也不知道iOS设备的乘法顺序是正确的
发布了类似的问题,但解决方案中的顺序对我不起作用。关于:哪个角度与哪个轴相关。 见此: 关于旋转顺序用于计算旋转矩阵和欧拉角(俯仰、横滚、偏航) 简短回答:ZXY是iOS上的轮换顺序 我也一直在寻找这个答案。我累了。不确定为什么没有记录在易于查找的地方。我决定收集经验数据,并测试哪个旋转顺序与值最匹配。我的价值观如下
方法学:
我不是iOS开发人员(我根本不是开发人员!),但一点“谷歌搜索”就能说明这一点。由于四元数只有两种标准(而不是矩阵旋转的12种变体),但R矩阵和四元数之间存在对应关系,请尝试使用它而不是euler角。正如我所知,四元数是明确的。(是的,这似乎更像是一个数学答案,但是……如果你有关于四元数的问题,请随意提问。你确定吗?请检查我的问题: