作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在我的应用程序中使用 coreMotion
来检测 iOS 设备的运动。我知道如何从 coreMotion
获取不同传感器的数据。我从 deviceMotion
中获取滚动、俯仰和偏航数据,如下所示:
float pitch = (180/M_PI)*self.manager.deviceMotion.attitude.pitch];
float roll = (180/M_PI)*self.manager.deviceMotion.attitude.roll];
float yaw = (180/M_PI)*self.manager.deviceMotion.attitude.yaw];
如何使用这些数据来检测运动?我需要为此做哪些计算?
最佳答案
姿态值需要设备运动更新启动为:
startDevicemotionUpdates
要在设备移动时监控姿态值,请使用要在标签中显示的姿态值:
[self.cmMotionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *devMotion, NSError *error) {
float pitch = (180/M_PI)*self.manager.devMotion.attitude.pitch];
float roll = (180/M_PI)*self.manager.devMotion.attitude.roll];
float yaw = (180/M_PI)*self.manager.devMotion.attitude.yaw];
self.rollLabel.text = [NSString stringWithFormat:@"%f", roll];
self.pitchLabel.text = [NSString stringWithFormat:@"%f",pitch];
self.yawLabel.text = [NSString stringWithFormat:@"%f",yaw];
}
此外,最好不要使用 roll、pitch 和 yaw(也称为欧拉角)。使用四元数或旋转矩阵以获得更高的准确性。欧拉角倾向于处于称为万向节锁定的情况,这会导致数据不可靠。
请检查此链接以了解如何使用四元数,并将该值转换为滚动、俯仰和偏航值:SO link
关于ios - 如何使用 deviceMotion 姿态值(滚动、俯仰和偏航)来检测运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16602840/
我是一名优秀的程序员,十分优秀!