remapCoordinateSystemの引数には何を指定する?|Android開発

      2016/11/15

方位角を取得する、android.hardware.SensorManagerのAPI
remapCoordinateSystemについて引数がイマイチ分からず、ネットの情報も色々異なっていたので自身が確認した内容を残しておきます。

書式
boolean remapCoordinateSystem(float[] inR, int X, int Y, float[] outR)

解説

XYにはワールド軸の値を設定する。
設定可能な値は以下。

  • SensorManager.AXIS_MINUS_X
  • SensorManager.AXIS_MINUS_Y
  • SensorManager.AXIS_MINUS_Z
  • SensorManager.AXIS_X
  • SensorManager.AXIS_Y
  • SensorManager.AXIS_Z

ワールド軸は自分が立った状態で考えると分かりやすいです。
上が+Z、正面が+Y、右が+X。(足元は-Z、後ろが-Y、左が-X)
この状態で端末を縦長(Portrait)で地面に水平にした状態が基準となります。そして、この状態で自分の正面が北であれば、方位角は0となります。

remapCoordinateSystemの引数XYはPortrait状態で見たディスプレイ右方向がX、ディスプレイ上方向がYとなります。
よって、

  • 端末をPortraitで正面に向けた場合、Xはワールド軸の+Z、Yはワールド軸の+Zとなります。
  • 端末をLandscapeで正面に向けた場合、Xはワールド軸の-X、Yはワールド軸の+Zとなります。

ワールド軸の図

ワールド軸

Portrait時の引数X,Y

Portrait

Landscape時の引数X,Y

Landscape

使い方

mCurrentDegreeLandscapemCurrentDegreePortraitは同じ値になるはずです。

 - Android