Перевизначення системи відліку

Щоб обчислити положення пристрою в просторі за допомогою системи відліку, відмінною від стандартної (описаної вище), використовуйте метод 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]);

Схожі статті