0

n android.view.onSensorChanged() のリファレンス ページでは、デバイスの軸は次のように説明されています。

「X 軸は画面の水平軸 (ポートレート モードでは小さな端、ランドスケープ モードでは長い端) を指し、右を指します。Y 軸は画面の垂直軸を指し、画面の上部 (原点は左下隅にあります。デバイスがテーブルに仰向けに置かれている場合、Z 軸は空を指します。」

また、android.hardware.SensorManager.getOrientation() では、このメソッドはデバイスの方位角、ピッチ、ロールを返します。これらは反時計回りの正の値です。しかし、コードから関数を呼び出して値を出力すると、方位角とピッチは時計回りの方向で正になり、反時計回りの方向で負になります。android.hardware.SensorManager.getRotationMatrix() によって取得される回転マトリックスは、私が主張するものが正しい場合、つまり、方位角とピッチが時計回りの方向で +ve であり、ロールが反時計回りで +ve である場合、要件を満たしています。方向。私が間違っている場合は修正してください。Android 2.3.3 で動作する HTC Wildfire S を使用しています。

方向の値を取得するために使用しているコード セグメントを追加しています。

sensormanager =  (SensorManager)getSystemService(Context.SENSOR_SERVICE);
Sensor gsensor = sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Sensor msensor = sensormanager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
sensormanager.registerListener(this, gsensor, SensorManager.SENSOR_DELAY_GAME);
sensormanager.registerListener(this, msensor, SensorManager.SENSOR_DELAY_GAME);

-------------------------------------------------------------------------------

final float rad2deg = (float)(180.0f/Math.PI);  
int type = event.sensor.getType();
float[] data;
if (type == Sensor.TYPE_ACCELEROMETER) {
    data = gravityValues;
} else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
    data = geomagneticValues;
} else {
     return;
}
for (int i=0 ; i<3 ; i++)
    data[i] = event.values[i];

SensorManager.getRotationMatrix(rValues, null, gravityValues, geomagneticValues);
SensorManager.getOrientation(rValues, mOrientation);

result.setText("Compass yaw: " + (int)(mOrientation[0]*rad2deg) + "  pitch: " + (int)(mOrientation[1]*rad2deg) +"  roll: " + (int)(mOrientation[2]*rad2deg) );

必要な情報について言及していない場合は、教えてください。前もって感謝します。

4

1 に答える 1

0

ドキュメントは正しく、getOrientation 呼び出しの Z 軸は地球に向かって下を向いています。したがって、反時計回りは通常の意味で時計回りです。

于 2012-03-31T00:10:17.410 に答える