при использовании CMDeviceMotion, если устройство находится прямо вверх (шаг = 90), оно действительно нестабильно. В любом случае, чтобы решить это?

Я знаю, что система координат (тангаж, рыскание, крен) имеет свои математические недостатки. Однако я действительно надеюсь, что что-то вместо этого или производное от этих координат может быть альтернативой.

То, что я пытаюсь сделать, это переместить устройство (скажем, iphone) в реальный мир и попытаться выяснить рыскание и шаг относительно глаз пользователя. Таким образом, диапазон рыскания должен быть (-180, 180), а диапазон тангажа должен быть (-90, 90). Когда я перемещаю iphone (всегда лицом ко мне) снизу вперед, CMDeviceMotion дает мне изменение высоты тона от 0 до 90, и пока я перемещаю iphone (все еще обращенный ко мне) спереди вверх, CMDeviceMotion дает мне изменение высоты тона от 90 назад до 0. Это хорошо, и я очень доволен данными высоты тона.

Однако, когда шаг близок к 90, рыскание очень шаткое и неустойчивое. Уилл, это не проблема, потому что я могу игнорировать изменение рыскания, когда шаг составляет около 90. Однако реальная проблема заключается в том, что значение рыскания резко меняется до увеличения шага и после уменьшения шага. Я имею в виду, что это не только шаткие, но средние изменения! меняет что-то вроде 180 (Пи). Я думаю, это потому, что координата полностью меняется. Но сейчас я потерялся в передаче координат.


person user1386058    schedule 19.05.2012    source источник


Ответы (1)


Этот запутанный обходной путь, который вы только что описали, является именно той причиной, по которой вам не следует использовать крен, тангаж и рыскание.

Вы либо идете по этому пути дальше и делаете беспорядок еще больше, либо используете матрицы вращения или кватернионы.

person Ali    schedule 19.05.2012
comment
Спасибо за ответ. Я попробовал кватернионы, но в конце концов мне пришлось перевести матрицу обратно в вращение, тангаж и рыскание ... по крайней мере, теперь это более стабильно. - person user1386058; 29.05.2012