2

あなたがテレビを指さしていると想像してください。あなたはあなたの手であなたの電話を握っています。次に、手首を回転させます。

そのような動きを検出するには、どのセンサーを管理する必要がありますか?

ジャイロスコープ?オリエンテーション?加速度計?

4

3 に答える 3

7

センサーTYPE_MAGNETIC_FIELDTYPE_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()これらの軸を再定義するためにを使用する必要がある場合があります。

于 2011-07-27T15:30:37.050 に答える
0

それはあなたが何を検出したいかに依存します、あなたが電話が回転で動かされたことを検出したいなら、加速度計はおそらくあなたの最善の策です。電話が回転していることを検出したい場合は、向き。

于 2011-07-27T15:18:24.480 に答える
0

ジャイロスコープは、地球に対する自分の位置を気にしない場合に回転を検出するためのものです。

于 2018-11-29T21:05:11.383 に答える