CMAttitude ролка и изчисляване на тангажа

Самият въпрос е прост. Когато се използва движението CMDeviceMotion, то съдържа обект с име на отношение от тип CMAttitude, който съдържа ролка и стъпка. Roll и pitch описват въртенето на обекта около оста Y и X. Когато iPhone лежи на маса с дисплей, насочен нагоре, ролката и стъпката са 0. Когато завъртите iPhone около оста Y или X, тези стойности се актуализират.

Искам да знам как се изчисляват тези стойности. Има начин да се изчисли наклон и наклон от текущия вектор на гравитацията на устройството. Наклонът изглежда е: pitch = -asin(motion.gravity.y), но не мога да разбера как да изчисля наклона.

Благодаря за вашата помощ


person ChrisIsBack    schedule 10.12.2011    source източник


Отговори (3)


Вероятно е нещо като:

roll = -atan(x / z);

въпреки че трябва да промените знака в зависимост от това в коя ориентация се намирате и внимавайте около асимптотите, където z=0.

Вярвам, че Core Motion в действителност използва измервания на жироскоп в допълнение към показанията на акселерометъра, за да изчисли по-точно отношението (и може би също така да се справи с заключване на кардан).

person Daniel Dickison    schedule 10.12.2011

pitch = atan2(motion.gravity.z, motion.gravity.y)
roll = atan2(motion.gravity.z, motion.gravity.x)

по този начин стойността на стъпката ще бъде между 0 +pi и 0 -pi като ролка

person Batti    schedule 11.12.2011

person    schedule
comment
За пълнота: radiansToDegrees(float radians) { return ((радиани) * (180.0 / M_PI)); } - person Lucas van Dongen; 17.11.2014