我有一个非常简单的要求。假设一个设备站在它的末端,垂直于地面,并且它是倾斜的,我需要确定的是手机是向前还是向后倾斜(屏幕更朝向地面或更多朝向天花板)。
我知道如何从各种传感器读取值,我认为使用传感器TYPE_ROTATION_VECTOR是前进的方向。我所缺少的是数学知识如何从它返回的三个值中确定前进或后退。
我在没有启发的情况下阅读了SO上的所有相关主题,非常感谢任何帮助。
答案 0 :(得分: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
}
答案 1 :(得分: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====");
}
答案 2 :(得分:-1)
您可以使用加速度计和磁场传感器来检测此情况。
我发现这篇有用的博客文章中有必要的代码向您展示如何执行此操作。
http://www.ahotbrew.com/how-to-detect-forward-and-backward-tilt/