Я давно написал приложение, которое касалось относительных вращений. Я забыл, что делал код, но из того, что я вижу, похоже -
1) Я получаю исходную матрицу вращения, используя - SensorManager.getRotationMatrix (R, I, gravity.clone (), geomagn.clone ()); (Гравитация и геомагнетизм - соответствующие матрицы ускорения и геомагнитности. Не знаю, почему я использую клоны, но должна быть какая-то причина.)
2) Теперь на любом этапе получите текущую матрицу вращения и назовите ее R.
3) Рассчитать обратную исходную матрицу и назвать ее «initialInverse».
4) Умножьте R на initialInverse (или наоборот, вам придется это выяснить).
5) Получите свою окончательную ориентацию, используя SensorManager.getOrientation (дельта, значения)
Извините, но я полностью забыл, что делает приведенный выше код. Я думаю, что я помню, как читал слова Euler Transform где-то, когда писал это приложение, вот что оно может делать. К сожалению, я не могу дать вам полный код, так как, вероятно, я выпущу это приложение на рынке. Однако, если вам нужна дополнительная информация, пожалуйста, дайте мне знать - я посмотрю код и свяжусь с вами.