6

我有一个很简单的要求。假设一个设备端立,垂直于地面,并且它是倾斜的,我只需要确定手机是向前还是向后倾斜(屏幕更靠近地面还是更靠近天花板)。

我知道如何从各种传感器读取值,并且我认为使用传感器 TYPE_ROTATION_VECTOR 是前进的方向。我所缺少的只是从它返回的三个值中确定向前或向后的数学知识。

我已经阅读了关于 SO 的所有相关主题,没有任何启发,非常感谢任何帮助。

4

3 回答 3

3
float[] rotationMatrix = new float[9];
float[] inclinationMatrix = new float[9];
float[] accelerometer; // values from sensor
float[] magnetic; // values from sensor
SensorManager.getRotationMatrix(rotationMatrix, inclinationMatrix, accelerometer, magnetic) 
int inclination = (int) Math.round(Math.toDegrees(Math.acos(rotationMatrix[8])));

if (inclination < 90)
{
      // face up
}

if (inclination > 90)
{
       // face down
}
于 2013-02-08T06:33:21.747 回答
1

X 轴水平且指向右侧,Y 轴垂直且指向上方,Z 轴指向屏幕正面的外侧。在这个系统中,屏幕后面的坐标具有负 Z 值。

参考坐标系定义为直接正交基,其中:

X is defined as the vector product Y.Z (It is tangential to the ground at the device's current location and roughly points East).
Y is tangential to the ground at the device's current location and points towards magnetic north.
Z points towards the sky and is perpendicular to the ground.

在你的情况下试试这个,

if(Round(y,4) < 8.0){
           Log.d("sensor", "=====UP====");


        }

        else if(Round(y,4) < -8.0){
            Log.d("sensor", "=====DOWN====");

        }

加速度计传感器

于 2013-01-23T10:36:03.500 回答
-1

您可以使用加速度计和磁场传感器来检测这一点。

我发现这篇有用的博客文章有必要的代码来告诉你如何做到这一点。

http://www.ahotbrew.com/how-to-detect-forward-and-backward-tilt/

于 2015-03-22T10:57:04.793 回答