2010-07-19 9 views
1

Je veux détecter les bonnes rotations autour de l'axe X avec les capteurs Android. Après googler, je trouve ce code:Question sur la rotation de l'axe X sur Android

public void onSensorChanged(SensorEvent event) { 
    Sensor sensor = event.sensor; 
    switch(sensor.getType()) { 
    case Sensor.TYPE_ACCELEROMETER: 
    mAcc = event.values.clone(); 
    break; 
    case Sensor.TYPE_MAGNETIC_FIELD: 
    mMag = event.values.clone(); 
    break; 
    } 
    if (mAcc == null || mMag == null) return; 

    float R[] = new float[9]; 
    if (SensorManager.getRotationMatrix(R, null, mAcc, mMag)) { 
    SensorManager.getOrientation(R, mOrientation); 
    } 
    } 

mOrientation [1] représente les radians autour de l'axe X. Cependant, la valeur est très étrange.

  1. Lorsque le téléphone est supérieur plat sur la table, il est 0.
  2. Lorsque la tête du téléphone pointant vers le sol, il est PI/2.
  3. Lorsque le téléphone repose à plat sur la table, il est de nouveau 0.
  4. Lorsque la tête du téléphone pointant vers le ciel, il -PI/2.

Les états entre 1,2 ont les mêmes valeurs de rotation que celles entre 2,3. Comment puis-je savoir dans quel état se trouve mon téléphone?

Répondre

0

Veuillez vérifier vos lectures.

Les signes & la plage que vous signalez sont complètement désynchronisés avec
ce qui est attendu sur un appareil Android.

developer.android.com/reference/android/hardware/Sensor.html#TYPE_ORIENTATION

Note: Ce type de capteur existe pour des raisons historiques, utiliser s'il vous plaît getRotationMatrix() conjointement avec remapCoordinateSystem() et GetOrientation() pour calculer ces valeurs à la place.

Cordialement
CVS @ 2600Hertz