DeviceMotion относительно мира - multiplyByInverseOfAttitude

Как правильно использовать CMAttitude: multiplyByInverseOfAttitude?

Предположим, что устройство iOS5 лежит на столе горизонтально , после запуска CMMotionManager с:

CMMotionManager *motionManager = [[CMMotionManager alloc]init];
[motionManager startDeviceMotionUpdatesUsingReferenceFrame:
    CMAttitudeReferenceFrameXTrueNorthZVertical];

Позже будут получены объекты CMDeviceMotion:

CMDeviceMotion *deviceMotion = [motionManager deviceMotion];

Я ожидаю, что [deviceMotion position] отражает поворот устройства от Истинного Севера.

По наблюдениям, [deviceMotion userAcceleration] сообщает об ускорении в опорном кадре устройства. То есть, перемещая устройство из стороны в сторону (удерживая его ровно на столе), ускорение регистрируется по оси абсцисс.Поворот устройства на 90 ° (по-прежнему плоский) и перемещение устройства из стороны в сторону по-прежнему сообщает об ускорении.

Каков правильный способ преобразования [deviceMotion userAcceleration] для получения ускорения Север-Юг / Восток-Запад, а не ускорение влево-вправо / вперед-назад?

CMAttitude multiplyByInverseOfAttitude кажется ненужным, поскольку опорный кадр уже указан и из документации неясно, как применить отношение к CMAcceleration.

11
задан Zaq 31 October 2011 в 04:50
поделиться