Как создать новую опорную рамку CMAttitude, чтобы гравитация находилась на оси Y

Я хочу иметь возможность изменить опорную рамку Device Motion Manager (для гироскопа) так, чтобы мой вектор гравитации располагался по оси Y.

Обычно, когда вы запускаете обновления Device Motion Manager, вы выравниваете только ось z телефона с учетом силы тяжести.

Вы можете изменить это, чтобы использовать магнитометр, чтобы выровнять ось x либо с магнитным, либо с истинным северным полюсом. При этом моя ось X указывает на север, а ось Z - вниз.

Я хочу, чтобы моя ось Y (отрицательная) была направлена ​​вниз (чтобы она была выровнена с гравитацией), а также чтобы ось X указывала на истинный магнитный полюс.

Я хочу получить такой результат, что когда мой телефон стоит неподвижно в вертикальной (портретной) ориентации, правая часть телефона будет выровнена по северному полюсу, и все мои показания (крен, тангаж, рыскание) будут равны 0. Затем, если я поверну телефон по оси X, шаг изменится, а если я повернусь вокруг оси Y, изменится рыскание.

Пока я знаю, что могу установить свою собственную систему отсчета, если умножу на инверсию отношения ранее сохраненное отношение (например, я мог бы установить свой телефон в эту ориентацию ВРУЧНУЮ, сохранить это отношение и просто продолжать умножать новое отношение инверсией этого сохраненного, и все мои показания будут точно такими же, как те, которые я хочу).

Но установка вручную не вариант, так как мне сделать это программно?

Я не думаю, что есть функция для создания моей собственной системы отсчета отношения, или, по крайней мере, была функция для умножения отношение с помощью матрицы вращения, тогда я, вероятно, мог бы решить эту проблему. (потому что я бы просто умножил все отношения на изменение высоты тона на 90 градусов).

Надеюсь, я ясно объяснил,

Буду признателен за любые предложения. спасибо

PD: Это координаты ориентации iPhone:

enter image description here

19
задан Pochi 3 February 2012 в 01:19
поделиться