Расчет крена и тангажа 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 ((radians) * (180.0/M_PI)); } - person Lucas van Dongen; 17.11.2014