首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SensorManager.getOrientation()的问题

SensorManager.getOrientation()的问题
EN

Stack Overflow用户
提问于 2011-09-19 21:33:40
回答 1查看 2.1K关注 0票数 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上。

我添加了代码段,我用它来获取方向值。

代码语言:javascript
复制
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) );

如果我遗漏了任何必要的信息,请让我知道。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-03-31 08:10:17

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7471788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档