Как понять исходную систему отсчета отношения устройства iOS 8?

В документе разработчика Apple о руководстве по обработке событий для iOS мы можем найти утверждение «Core Motion устанавливает опорный фрейм, когда ваше приложение запускает обновления движения устройства».

  1. Доза это означает, что когда я запускаю свое приложение, первые данные вращения являются моей системой отсчета?
  2. Если это правда, то когда я запускаю свое приложение с любым отношением, первый набор кватерниона должен быть [1 0 0 0], правильно?

Эксперименты с кватернионом:

  1. Я запускаю свое приложение с плоским экраном на столе
    кватернион: [0,999 0,003 0,010 -0,004]
    акселерометр: [0,01 0,00 -1,00]
  2. Я запускаю свое приложение с углом наклона по оси X
    кватернион: [0,97 0,22 0,000 0,000]
    акселерометр: [0,00 -0,44 -0,89]

Результаты эксперимента не соответствуют утверждению в документе. Я действительно смущен этим.


person Hugo    schedule 23.08.2015    source источник
comment
первый набор кватерниона должен быть [1 0 0 0], верно? Нет, это не так. - Какой CMAttitudeReferenceFrame вы просили, когда начинали обновления?   -  person matt    schedule 23.08.2015
comment
Спасибо за ваш комментарий. Я не устанавливал вручную константу CMAttitudeReferenceFrame. Я просто использую значение по умолчанию.   -  person Hugo    schedule 23.08.2015
comment
Итак, какое значение по умолчанию? Очень важно знать, какова ваша система отсчета. Это вопрос о системе отсчета!   -  person matt    schedule 23.08.2015
comment
@matt Я думаю, что опорным кадром является CMAttitudeReferenceFrameXArbitraryZVertical, который описывает опорный кадр, в котором ось Z вертикальна, а ось X указывает в произвольном направлении в горизонтальной плоскости.   -  person Hugo    schedule 23.08.2015


Ответы (1)


Вы используете опорный кадр CMAttitudeReferenceFrameXArbitraryZVertical, когда вас интересует отклонение от исходного положения. В системе отсчета CMAttitudeReferenceFrameXArbitraryZVertical первое сообщенное положение устанавливает начальную систему отсчета. Это означает, что его значение по сути произвольно. Вы должны игнорировать его значение, но в то же время вы должны сохранить это первоначальное отношение и впоследствии всегда вызывать multiplyByInverseOfAttitude: при любых новых отношениях, передавая сохраненное отношение в качестве параметра. Это дает вам информацию относительно исходного положения.

person matt    schedule 23.08.2015
comment
Вы имели в виду, что я могу установить отношение в качестве исходной системы отсчета, позвонив multiplyByInverseOfAttitude:, тогда все сообщаемые отношения являются ссылкой на настрой, который я установил? - person Hugo; 23.08.2015
comment
Нет, я имею в виду то, что сказал. Вы сохраняете первоначальное отношение и звоните multiplyByInverseOfAttitude: каждый раз после этого. - person matt; 23.08.2015
comment
То же самое и здесь: developer.apple.com/library/ios/documentation/EventHandling/ Кэшируйте объект отношения, содержащий опорный фрейм, и передайте его в качестве аргумента multiplyByInverseOfAttitude:. Аргумент отношения, получающий сообщение, изменяется так, что он представляет изменение отношения из переданной системы отсчета. - person matt; 23.08.2015