0

android.view.onSensorChanged() 的 n 参考页,设备的轴被描述为

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

如果我错过提及任何必需的信息,请告诉我。提前致谢。

4

1 回答 1

0

文档是正确的,getOrientation 调用中的 Z 轴指向地球。因此逆时针是正常意义上的顺时针。

于 2012-03-31T00:10:17.410 回答