あなたは重力が含まれる生の加速を、アクセスしています。これは、実際には(0、0、-1)がであることを意味していることが明らかです。です。
もう少し安定している(そして重力ベクトルを無効にしたい)場合は、デバイスの動きを使用してください。デバイスのモーションインターフェイスから得られるデータは、センサ融合フィルタリング方法を使用してフィルタリングされ、安定化されるため、加速度データはより正確になります。
import UIKit
import CoreMotion
class ViewController: UIViewController {
let motionManager = CMMotionManager()
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
motionManager.deviceMotionUpdateInterval = 0.1
motionManager.startDeviceMotionUpdates(to: .main) { (motion, error) in
if let motion = motion {
var x = motion.userAcceleration.x
var y = motion.userAcceleration.y
var z = motion.userAcceleration.z
// Truncate to 2 significant digits
x = round(100 * x)/100
y = round(100 * y)/100
z = round(100 * z)/100
// Ditch the -0s because I don't like how they look being printed
if x.isZero && x.sign == .minus {
x = 0.0
}
if y.isZero && y.sign == .minus {
y = 0.0
}
if z.isZero && z.sign == .minus {
z = 0.0
}
print(String(format: "%.2f, %.2f, %.2f", x, y, z))
}
}
}
}
ところで、これはすべてthe docsの最初の段落にあります。 rotation-生の加速度計データ、生のジャイロデータ、生の磁力計データ、および加速度計を含む処理デバイスモーションデータ(:
CMMotionManagerのインスタンスを作成したら、それを使用することができ、アプリケーションは、4つの動きのタイプを受信します速度、および姿勢の測定値)。 Core Motionのセンサ融合アルゴリズムによって提供される処理されたデバイス動作データは、デバイスの姿勢、回転速度、較正された磁場、重力の方向、およびユーザがデバイスに与える加速度を与える。
なぜ正しくないのですか?地球の重力のために一定の-1gがあります。 – Paulw11