我知道以前有人问过这个问题,但我还没有找到我正在寻找的答案。
我想做的就是把手机举到天空中,并知道我拿着它相对于地平线的角度。因此,如果我将它直接放在我的上方(屏幕面向地面),那么它的读数应该是 90 度,如果我把它放在我面前(屏幕面对我),它的读数应该是 0 度。
我摸索了一些从加速度计获取数据的基础知识,我相信我从中得到了 X、Y 和 Y 值。我怎样才能抓住这些点并找到我的角度?下面是我从中收集坐标的 OnSensorChanged 事件。
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
mGravity = event.values;
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
mGeomagnetic = event.values;
if (mGravity != null && mGeomagnetic != null) {
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
if (success) {
float orientation[] = new float[3];
SensorManager.getOrientation(R, orientation);
playerAngle = (float) Math.toDegrees(Math.atan2(orientation[1], orientation[0]));
}