質問: pitchDeg - 90 } } ``` ### 試したこと 姿勢センサーのpitchは、デバイスのZ軸が少しでも傾いていた場合、値の境が88とか86とかになってしまうような感じです。 ### 補足情報(言語/FW/ツール等のバージョンなど) Swift3、Xcode8、iOS10
回答: 回転というのは順番を入れ替えると通常は別の結果になります。 (実際にx軸に90度回してからy軸に90度回したり、y軸に90度回してからx軸に90度回してみてください。) つまり姿勢を三軸の回転角度で表してある場合は、 どの姿勢を基準に どういう順番で回してあるか を確認することが重要になります。 さて、あなたが期待している量はデバイスを鉛直上向きに立てて、カメラ(z軸)を磁北に向けた状態を基準に yaw(y)->pitch(x)->roll(z)の順番に回した量ですが、 おそらく実際得られるデバイスの姿勢は 画面が水平上向きで、y軸が磁北を向いている状態を基準にして、 yaw(z)->pitch(x)->roll(y)の順番に回した量です。 この表現だと、デバイスを垂直に立ててz軸を少し回すと、 pitchが90度にならないことがわかると思います IOSやSwiftに全然詳しくないので、もっと直接的な方法があるかはわからないのですが、 愚直にやるなら、 姿勢を回転行列なりクォータニオンで取得して、 あれこれ計算してあなたが期待したオイラー角に変換します。 ところでやりたいことが、 デバイスを中心としたワールド座標上に固定されたUFOを カメラに射影する感じだとすると、 回転行列を使ってUFOのデバイス座標を計算することになるので、 わざわざ角度を取得する意味は無いと思います。