swift - 如何使用 CMDeviceMotion 正确设置初始参考帧
问题描述
我目前正在开展一个项目,在该项目中,一旦按下按钮,我就会收集设备姿态(方向)的大小,并随着时间的推移进行绘制。我想将其设置为初始姿态设置为按下按钮时设备所处的姿态,因此所有进行的值都相对于该零点。
我一直在使用这个网站作为指南: https ://nshipster.com/cmdevicemotion/ 最后的教程是我正在寻找的,因为执行“multiplyByInverseOf”最初的态度应该是我所追求的。
这是我的结果的快照(从 3 开始,因为它是 3 秒倒计时):
time attitude Magnitude
3 0
2.99 0.673
2.98 0.673
2.97 0.673
2.96 0.67
2.95 0.669
2.94 0.668
我正在使用的代码:
self.motion.startDeviceMotionUpdates(to: OperationQueue.current!) { (motion, error) in
//START Code here runs every 'updateFrequency'
if let data = self.motion.deviceMotion {
//Store initial attitude for reference
if self.isFirst == true {
self.initialAttitude = data.attitude
self.isFirst = false
}
//attitude of phone impacted by user
data.attitude.multiply(byInverseOf: self.initialAttitude!)
let attitudeMagnitude = self.magnitudeFromAttitude(attitude: data.attitude)
initialAttitude 和 isFirst 都是全局的;isFirst 仅用于访问循环的第一次迭代(以检索初始姿态)。
可以看出,第一个数据点是正确的零引用,但是值会跳跃(并保持稳定)超过此值。如何重构我的代码以防止这种跳转?
提前谢谢了!
解决方案
推荐阅读
- xml - MWS 产品提要 创建产品
- c# - 受保护字段中的 C# 内部类型
- oracle - Oracle Dataguard 将备用数据库回滚到主数据库
- ethereum - 使用库在solidity中更改字符串状态变量?
- apache-kafka - Kafka v 2.8 不支持类 KafkaServerStartable
- c++ - 架构 x86_64 的未定义符号 curl_easy_init
- node.js - NestJs 是 node.js 初学者的正确选择,还是我应该先用 Express 做点什么?
- excel - 试图通过类名 VBA Selenium 获取元素
- facebook-graph-api - 是否可以使用 Facebook 的 GraphAPI 在字段上设置 date_preset?
- ruby-on-rails - 当我尝试显示特定事件的评论时,“nil:NilClass 的未定义方法‘每个’”