我有一个CMRotationMatrix * rot,我想从矩阵中得到俯仰,偏航,滚动.
任何想法我怎么能这样做?
任何想法我怎么能这样做?
谢谢
解决方法
使用四元数比使用欧拉角更好….滚动,俯仰和偏航值可以使用以下公式从四元数导出:
roll = atan2(2*y*w - 2*x*z,1 - 2*y*y - 2*z*z) pitch = atan2(2*x*w - 2*y*z,1 - 2*x*x - 2*z*z) yaw = asin(2*x*y + 2*z*w)
它可以实现为:
CMQuaternion quat = self.motionManager.deviceMotion.attitude.quaternion; myRoll = radiansToDegrees(atan2(2*(quat.y*quat.w - quat.x*quat.z),1 - 2*quat.y*quat.y - 2*quat.z*quat.z)) ; myPitch = radiansToDegrees(atan2(2*(quat.x*quat.w + quat.y*quat.z),1 - 2*quat.x*quat.x - 2*quat.z*quat.z)); myYaw = radiansToDegrees(asin(2*quat.x*quat.y + 2*quat.w*quat.z));
其中radianstoDegrees是一个预处理器指令,实现如下:
#define radiansToDegrees(x) (180/M_PI)*x
这样做是为了将公式给出的弧度值转换为度.
有关转换的更多信息,请访问:
tinkerforge和这里:Conversion between Quaternions and Euler angles.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。