iPhoneを使って、角度を計測をしたいと考えています。
以下のようなコードで動きの始点と終点でそれぞれのroll, pitch, yawの角度を取得し、始点・終点の差から端末が動いた角度を算出したいと考えています。
Swift5
1 func startMotionManager(){ 2 3 guard motionManager.isDeviceMotionAvailable else { return } 4 5 motionManager.deviceMotionUpdateInterval = 1 6 7 motionManager.startDeviceMotionUpdates( 8 using: .xArbitraryCorrectedZVertical, 9 to: OperationQueue.current!, 10 withHandler: { 11 [weak self] (motion, error) in 12 guard let motion = motion, error == nil else { return } 13 14 self?.currentXAngle = Int(motion.attitude.roll * 180 / Double.pi) 15 self?.currentYAngle = Int(motion.attitude.pitch * 180 / Double.pi) 16 self?.currentZAngle = Int(motion.attitude.yaw * 180 / Double.pi) 17 18 }) 19 }
しかし、取得できる角度のうち、pitchだけ最大値が180°ではなく、90°であることが分かりました。得られるpitchの角度は二次元座標で表すと、第一象限は0°〜90°、第二象限は90°〜0°、第三象限は0°〜−90°、第四象限は−90°〜0°です。
(*「なお、ピッチ角の値は90度から-90度の間までで表され、±90度を超えてデバイスを傾けると、角度の値は再び減って(マイナスの場合は増えて)いきます。その代わり、デバイスが裏返ったとみなされ、ロール角の値が180度回転した値となります。」(https://www.atmarkit.co.jp/fsmart/articles/ios_sensor02/03.htmlより))
180°以内の角度であれば、正の値と負の値で条件を分けて計算することで角度を算出できそうですが、180°を超える動きで、pitchの移動角度を計算する方法がどうしても思いつきませんでした。
そもそも運動した角度を取得する方法自体が誤っているのでしょうか?
お分かりになる方がいらっしゃいましたら、ご助言願えれば幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。