Как обнаружить вращение смартфона, когда лежал на столе? - PullRequest
0 голосов
/ 09 октября 2019

Я создаю приложение, в котором смартфон будет лежать на плоской поверхности, и мне нужно определить его вращение следующим образом: https://i.imgur.com/iG0mJb2.png (я хочу прикрепить изображение, но у меня нет 10репутация)

Похоже, что TYPE_ROTATION_VECTOR возвращает Quarterion, который я конвертирую в углы Эйлера через код ниже:

float[] rotationMatrix = new float[16];
SensorManager.getRotationMatrixFromVector(
    rotationMatrix, 
    sensorEvent.values);

float[] remappedRotationMatrix = new float[16];
SensorManager.remapCoordinateSystem(
    rotationMatrix,
    SensorManager.AXIS_X, 
    SensorManager.AXIS_Z,               
    remappedRotationMatrix);

float[] orientations = new float[3];
SensorManager.getOrientation(remappedRotationMatrix, orientations);

for(int i = 0; i < 3; i++) {
    orientations[i] = (float)(Math.toDegrees(orientations[i]));
}

Это прекрасно работает, когда смартфон перевернут (как будто вы былиудерживая его, чтобы сделать селфи), но показывает противоречивые значения (приблизительно X + 50º) при выполнении того же поворота, что и на изображении выше.

Это проблема с датчиками или я должен изменить свой код?

...