我正在尝试从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]) ) ;


java - 前倾还是后倾? TYPE_ROTATION_VECTOR-LMLPHP

最佳答案

我最终添加了另一个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/

10-11 14:25