Когда устройство поворачивается на некоторую величину, простой куб должен вращаться на ту же величину, но в противоположном направлении. Например, куб должен повернуться на 45 градусов влево, если устройство повернуто на 45 градусов вправо. Или, когда шаг равен 30 градусам, куб должен повернуться на -30 градусов вокруг оси X. Когда рыскание составляет 10 градусов, куб должен повернуться на -10 градусов вокруг оси Z. Я использовал .getRotationMatrixFromVector, а затем getOrientation следующим образом:
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
SensorManager.getRotationMatrixFromVector(
mRotationMatrix , event.values);
SensorManager.getOrientation(mRotationMatrix, orientationVals);
azimuthVal = (Math.round((Math.toDegrees(orientationVals[0]))*100.0)/100.0);
pitchVal= (Math.round((Math.toDegrees(orientationVals[1]))*100.0)/100.0);
rollVal = (Math.round((Math.toDegrees(orientationVals[2]))*100.0)/100.0);}
Но проблема в том, что изменение шага влияет на крен и наоборот, и в результате при вращении устройства вокруг оси X значение щипка меняется -> изменяется крен -> куб вращается не только вокруг X, но и вокруг Y, когда я не это не нужно.
Я просмотрел Интернет, и многие ссылаются на кватернионы как на решение, но как я могу применить кватернионы к своему конкретному приложению, так как мне нужно знать, на сколько градусов устройство поворачивается вдоль оси.