Я создаю приложение, в котором смартфон будет лежать на плоской поверхности, и мне нужно определить его вращение следующим образом: 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º) при выполнении того же поворота, что и на изображении выше.
Это проблема с датчиками или я должен изменить свой код?