teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

コードを補完しました。

2021/03/14 09:00

投稿

Masa_teratail
Masa_teratail

スコア9

title CHANGED
@@ -1,1 +1,1 @@
1
- CMMotionManagerを使っpitch角度取得方法を教えて下さい。
1
+ CMMotionManagerを使っpitch角度取得したい。
body CHANGED
@@ -2,10 +2,12 @@
2
2
  以下のようなコードで**動きの始点と終点でそれぞれのroll, pitch, yawの角度を取得し、始点・終点の差から端末が動いた角度を算出**したいと考えています。
3
3
 
4
4
  ```Swift5
5
- guard motionManager.isDeviceMotionAvailable else { return }
5
+ func startMotionManager(){
6
6
 
7
- motionManager.deviceMotionUpdateInterval = 0.1
7
+ guard motionManager.isDeviceMotionAvailable else { return }
8
8
 
9
+ motionManager.deviceMotionUpdateInterval = 1
10
+
9
11
  motionManager.startDeviceMotionUpdates(
10
12
  using: .xArbitraryCorrectedZVertical,
11
13
  to: OperationQueue.current!,
@@ -15,10 +17,13 @@
15
17
 
16
18
  self?.currentXAngle = Int(motion.attitude.roll * 180 / Double.pi)
17
19
  self?.currentYAngle = Int(motion.attitude.pitch * 180 / Double.pi)
18
- self?.currentZAngle = Int(motion.attitude.yaw * 180 / Double.pi)
20
+ self?.currentZAngle = Int(motion.attitude.yaw * 180 / Double.pi)
21
+
22
+ })
23
+ }
19
24
  ```
20
25
 
21
- しかし、取得できる角度のうち、**pitchだけ最大値が180°ではなく、90°**であることが分かりました。なお、二次元座標で表すと、第一象限は0°〜90°、第二象限は90°〜0°、第三象限は0°〜−90°、第四象限は−90°〜0°です。
26
+ しかし、取得できる角度のうち、**pitchだけ最大値が180°ではなく、90°**であることが分かりました。得られるpitchの角度は二次元座標で表すと、第一象限は0°〜90°、第二象限は90°〜0°、第三象限は0°〜−90°、第四象限は−90°〜0°です。
22
27
  __(*「なお、ピッチ角の値は90度から-90度の間までで表され、±90度を超えてデバイスを傾けると、角度の値は再び減って(マイナスの場合は増えて)いきます。その代わり、デバイスが裏返ったとみなされ、ロール角の値が180度回転した値となります。」(https://www.atmarkit.co.jp/fsmart/articles/ios_sensor02/03.htmlより))__
23
28
 
24
29
  180°以内の角度であれば、正の値と負の値で条件を分けて計算することで角度を算出できそうですが、**180°を超える動きで、pitchの移動角度を計算する方法**がどうしても思いつきませんでした。

1

タイトルを変更しました。

2021/03/14 09:00

投稿

Masa_teratail
Masa_teratail

スコア9

title CHANGED
@@ -1,1 +1,1 @@
1
- CMMotionManagerを使ったpitch角度の取得方法
1
+ CMMotionManagerを使ったpitch角度の取得方法を教えて下さい。
body CHANGED
File without changes