質問編集履歴
2
コードを補完しました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
CMMotionManagerを使っ
|
1
|
+
CMMotionManagerを使ってpitch角度を取得したい。
|
body
CHANGED
@@ -2,10 +2,12 @@
|
|
2
2
|
以下のようなコードで**動きの始点と終点でそれぞれのroll, pitch, yawの角度を取得し、始点・終点の差から端末が動いた角度を算出**したいと考えています。
|
3
3
|
|
4
4
|
```Swift5
|
5
|
-
|
5
|
+
func startMotionManager(){
|
6
6
|
|
7
|
-
motionManager.
|
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°**であることが分かりました。
|
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
タイトルを変更しました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
CMMotionManagerを使ったpitch角度の取得方法
|
1
|
+
CMMotionManagerを使ったpitch角度の取得方法を教えて下さい。
|
body
CHANGED
File without changes
|