CMAttitude крен и расчет тангажа - PullRequest
0 голосов
/ 10 декабря 2011

Сам вопрос прост. При использовании движения CMDeviceMotion он содержит объект с именем position типа CMAttitude, который содержит крен и шаг. Roll и Pitch описывают вращение объекта вокруг оси Y и X. Когда iPhone лежит на столе с дисплеем, направленным вверх, наклон и высота тона равны 0. При повороте iPhone вокруг оси Y или X эти значения обновляются.

Я хочу знать, как рассчитываются эти значения. Существует способ расчета крена и тангажа по текущему гравитационному вектору устройства. Шаг кажется: шаг = -asin (motion.gravity.y) но я не могу понять, как рассчитать бросок.

Спасибо за вашу помощь

Ответы [ 3 ]

1 голос
/ 05 ноября 2014
CMQuaternion quat = self.motionManager.deviceMotion.attitude.quaternion;
myRoll = radiansToDegrees(atan2(2*(quat.y*quat.w - quat.x*quat.z), 1 - 2*quat.y*quat.y - 2*quat.z*quat.z)) ;
myPitch = radiansToDegrees(atan2(2*(quat.x*quat.w + quat.y*quat.z), 1 - 2*quat.x*quat.x - 2*quat.z*quat.z)); // PITCH !!!
myYaw = radiansToDegrees(asin(2*quat.x*quat.y + 2*quat.w*quat.z));
0 голосов
/ 11 декабря 2011
pitch = atan2(motion.gravity.z, motion.gravity.y)
roll = atan2(motion.gravity.z, motion.gravity.x)

таким образом, значение шага будет между 0 + пи и 0-пи, как бросок

0 голосов
/ 10 декабря 2011

Это, вероятно, что-то вроде:

roll = -atan(x / z);

хотя вам нужно изменить знак в зависимости от вашей ориентации, и будьте осторожны с асимптотами, где z = 0.

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

...