あなたがテレビを指さしていると想像してください。あなたはあなたの手であなたの電話を握っています。次に、手首を回転させます。
そのような動きを検出するには、どのセンサーを管理する必要がありますか?
ジャイロスコープ?オリエンテーション?加速度計?
あなたがテレビを指さしていると想像してください。あなたはあなたの手であなたの電話を握っています。次に、手首を回転させます。
そのような動きを検出するには、どのセンサーを管理する必要がありますか?
ジャイロスコープ?オリエンテーション?加速度計?
センサーTYPE_MAGNETIC_FIELD
とTYPE_ACCELEROMETER
はそれを検出するのに問題ありません(TYPE_ORIENTATION
現在は非推奨です)。
必要になるだろう:
いくつかのマトリックス:
private float[] mValuesMagnet = new float[3];
private float[] mValuesAccel = new float[3];
private float[] mValuesOrientation = new float[3];
private float[] mRotationMatrix = new float[9];
センサーが送信する値をキャッチするリスナー(これは、SensorManager.registerListener()
センサーをセットアップするために呼び出す必要があるという引数になります):
private final SensorEventListener mEventListener = new SensorEventListener() {
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
// Handle the events for which we registered
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(event.values, 0, mValuesAccel, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(event.values, 0, mValuesMagnet, 0, 3);
break;
}
};
そして、方位角、ピッチ、ロールを計算する必要があります。
SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet);
SensorManager.getOrientation(mRotationMatrix, mValuesOrientation);
mValuesOrientation
次に、次のように入力されます。
mValuesOrientation[0]
:方位角、Z軸を中心とした回転。mValuesOrientation[1]
:ピッチ、X軸を中心とした回転。mValuesOrientation[2]
:ロール、Y軸を中心とした回転。軸がどのように定義されているかを知るには、getOrientation()のドキュメントを確認してください。SensorManager.remapCoordinateSystem()
これらの軸を再定義するためにを使用する必要がある場合があります。
それはあなたが何を検出したいかに依存します、あなたが電話が回転で動かされたことを検出したいなら、加速度計はおそらくあなたの最善の策です。電話が回転していることを検出したい場合は、向き。
ジャイロスコープは、地球に対する自分の位置を気にしない場合に回転を検出するためのものです。