Наклон вперед или назад? TYPE_ROTATION_VECTOR - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь получить высоту звука от 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]) ) ;

enter image description here

1 Ответ

0 голосов
/ 22 февраля 2020

Я закончил тем, что добавил еще один сенсорный слушатель TYPE_ACCELEROMETER. Я проверяю, положительны ли значения [2], и в зависимости от результата я вычисляю высоту до числа от 0 до 360 (по часовой стрелке с 12 часов). Он работает нормально, но пропускает несколько чисел между 355-5 и 175-185. Дайте мне знать, если у вас есть лучшее решение.

Из Android документации:

значения [2]: angular скорость (без компенсации дрейфа) вокруг Z ось в рад / с

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;
  //...
...