Щоб обчислити положення пристрою в просторі за допомогою системи відліку, відмінною від стандартної (описаної вище), використовуйте метод remapCoordinateSystem з об'єкта SensorManager.
Раніше в цій главі стандартна система відліку описувалася таким про- разом, що пристрій повинен був лежати на плоскій поверхні екраном вгору. Подібний підхід дозволяє вам змінювати систему координат для обчислення положення в просторі. Таким чином, положення, при якому пристрій розташований вертикально, можна позначити як з- стояння спокою.
Метод remapCoordinateSystem приймає чотири параметри:
• вихідна матриця повороту, що отримується методом getRotationMatrix, як описувалося раніше;
• змінна, яка використовується для зберігання кінцевої (перетвореної)
• перевизначена вісь X;
• перевизначена вісь Y.
Два останніх параметра використовуються для вказівки нової системи відліку. Ці значення визначають нові осі X і Y, зміщені відноси- тельно стандартних. Клас SensorManager надає набір констант, що дозволяють вказувати значення для осей: AXIS_X, AXIS_Y, AXIS_Z, AXIS_MINUS_X, AXIS_MINUS_Y і AXIS_MINUS_Z.
У лістингу 14.5 показується, як перевизначити систему відліку та- ким чином, щоб стан спокою наступало, коли пристрій располо- жено вертикально в портретному режимі, екран повернений до користувача (ріс.14.3).
SensorManager.getRotationMatrix (R, null, aValues, mValues);
float [] outR = new float [9]; SensorManager.remapCoordinateSystem (R,
SensorManager.AXIS_X, SensorManager.AXIS_Z, outR);
// Перетворіть радіани в градуси.
values [0] = (float) Math.toDegrees (values [0]); values [1] = (float) Math.toDegrees (values [1]); values [2] = (float) Math.toDegrees (values [2]);