Проблема с SensorManager.getOrientation () - PullRequest
0 голосов
/ 19 сентября 2011

n справочных страниц для android.view.onSensorChanged () Оси устройства описаны как

"Ось X относится к горизонтальной оси экрана (маленький край в портретном режиме, длинный край вландшафтный режим) и указывает вправо. Ось Y относится к вертикальной оси экрана и указывает на верхнюю часть экрана (начало координат находится в нижнем левом углу). Ось Z указывает на небо, когда устройство находитсяна спине на столе. "

и в android.hardware.SensorManager.getOrientation () упоминается, что метод вернет азимут, шаг и поворот устройства, которые положительны в направлении против часовой стрелки.направление.Но когда я вызывал функцию из своего кода и печатал значения, азимут и шаг были положительными в направлении по часовой стрелке и отрицательными в направлении против часовой стрелки.Матрица вращения, полученная android.hardware.SensorManager.getRotationMatrix (), отвечает требованиям, если то, что я утверждаю, является правильным, то есть азимут и высота тона + ve в направлении по часовой стрелке и крен + ve в против часовой стрелкинаправление.Пожалуйста, поправьте меня, если я ошибаюсь.Я использую HTC Wildfire S, который работает на Android 2.3.3.

Я добавляю сегмент кода, который я использую для получения значений ориентации.

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) );

Пожалуйста, дайте мне знать, если я пропустил упоминание любой необходимой информации.Заранее спасибо.

1 Ответ

0 голосов
/ 31 марта 2012

Документация верна, ось Z в вызове getOrientation направлена ​​вниз к земле.Таким образом, против часовой стрелки по часовой стрелке в обычном смысле.

...