我正在尝试从Sensor.TYPE_ROTATION_VECTOR中获取信息,但我不知道如何解释结果。
无论电话向前还是向后倾斜,音高值都相同(向前=电话的顶部移离用户面部,电话的底部移近用户面部)。
图像中的线表示从侧面看并倾斜到不同角度的电话。顶部/中间电话垂直于地面。
我需要一个类似于方位角的值(从-180到+180,不重复)。
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
SensorManager.getRotationMatrixFromVector(rMat, sensorEvent.values);
SensorManager.getOrientation(rMat, orientation);
pitch = (int) (Math.toDegrees(orientation[1]) ) ;
最佳答案
我最终添加了另一个TYPE_ACCELEROMETER的传感器侦听器。
我正在检查values [2]是否为正,并根据结果将螺距计算为0到360之间的一个数字(从12点开始顺时针旋转)。
它可以正常工作,但是会跳过355-5和175-185之间的一些数字。
让我知道您是否有更好的解决方案。
从Android文档中:
values [2]:绕Z轴的角速度(无漂移补偿),单位rad / s
boolean isPositive = true;
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
isPositive = sensorEvent.values[2] > 0;
}
if (sensorEvent.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
SensorManager.getRotationMatrixFromVector(rMat, sensorEvent.values);
SensorManager.getOrientation(rMat, orientation);
pitch = (int) (Math.toDegrees(orientation[1]) ) ;
if(isPositive) //between 6 and 12 o'clock
pitch = 270 - pitch;
else //between 12 and 6 o'clock
pitch = 90 + pitch;
//...
关于java - 前倾还是后倾? TYPE_ROTATION_VECTOR,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60354728/