iphone - движение ядра (относительное вращение) - PullRequest
5 голосов
/ 20 февраля 2011

Есть ли способ получить относительное вращение от движения ядра?

Что мне нужно, это: сколько он повернул в одну ось и в каком направлении (+ знак = против часовой стрелки, - = по часовой стрелке, в соответствии ск правилу правой руки).

Я нашел свойство RotationRate, но теперь я уверен, как извлечь из него угол, поскольку это дает мне радианы в секунду.

В последние дни я делал все что угодно, но ничто не дает мне стабильных ценностей.Я попытался выполнить синхронизированную выборку данных о движении ядра, используя NSTimer, и рассчитать разницу между двумя выборками, чтобы я мог определить, насколько сильно он повернулся с момента последней выборки, но время от времени он дает мне сумасшедшие числа, такие как 13600 градусов.даже когда iPhone лежит на столе.

Есть мысли о том, как это можно сделать?

спасибо

Ответы [ 2 ]

7 голосов
/ 20 февраля 2011

Да, действительно. Вы можете получить то, что ищете, углубившись в свойства CMMotionManager , CMDeviceMotion и, наконец, CMAttitude . Отношение устройства определяется как:

ориентация тела относительно данная система отсчета.

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

Класс CMAttitude предоставляет некоторые удобные встроенные функциональные возможности для преобразования CMAttitude в форму, которая действительно полезна для чего-либо, например, углов Эйлера, матрицы вращения или кватерниона. Похоже, вы ищете представление Угол Эйлера (Pitch, Yaw, Roll).

3 голосов
/ 08 сентября 2011

Ответ, приведенный выше, не совсем точен, хотя, вероятно, достаточно ответить на этот вопрос. Core Motion всегда пытается определить абсолютную ориентацию устройства, что означает, что определение осей может варьироваться в зависимости от ориентации устройства. Например, если устройство обращено вверх, то шаг вверх / вниз - это вращение вокруг оси y, но если устройство находится в горизонтальной ориентации, то шаг - это вращение вокруг оси z (перпендикулярно плоскости экран). Это несколько полезно, если ваше приложение будет использоваться только в одной ориентации, или вы хотите использовать дельту, подобную заданному вопросу, но усложняет ее, если вы хотите знать абсолютную ориентацию.

...