加速度センサから好きな角度(0〜360度)を基準にした方向キー値を得る方法

加速度センサをジョイスティックみたいな方向キー替わりに使ってたりする場合、X方向は加速度Xをみていれば何とかなると思うが、
Y方向は加速度Yとか加速度Zだけみている方式だと、多分いい感じに動いてくれないことと思う。
(45度固定みたいな話なら何とかなるんだけど、ユーザーによってはプレイする角度を変更したいと言われると思う)


そんな時、役に立つのが atan2(x, y) という関数!
これは、座標値(x、y)から角度(ラジアン角[−π〜π] -> -180〜180度)を求める事が出来る。


これを使って、Y方向角度 = atan2(加速度Z、加速度Y) を求め、
さらに、Y方向キー値 = sin(Y方向角度 + お好きな設定角度) という風にすると、
好きな設定角度を基準(0)として(-1.0〜0〜1.0)みたいになるような値を求められる。


これを使うと、iPhoneをひっくり返していようが、そのひっくり返った時の角度を基準値として設定しておけば、
ちゃんとY方向キーとして使えてしまうので面白い。


ちなみに、エントリー中で角度といってるのはデグリーでなくラディアン角度なんでご注意遊ばせ。


なお、asin、acos みたいな関数だと、単体の加速度からそれぞれの角度を得られます。
が、得られる範囲が-90度〜90度、0〜180度みたいな制限があるので注意。


加速度センサと角度の関係性は↓等にある図が分かりやすい
http://www.robotsfx.com/robot/TriAxisSen.html



あと、360度といっても、あくまで重力加速度方向に関した向きしか取れないんで、辺りをぐるっと見回すようなアプリの場合だとコンパスと組み合わせる必要があるかと。(というかコンパスだけで充分か)