Вычислить высоту и Азимут по CMAttitude, используя либо крен, шаг и рыскание или кватернион или матрицу вращения

Я поражен проблемой. Я хочу преобразовать информацию CMAttitude iPhone в высоту (от 0 до 90 градусов) и Азимут (от 0 до 360 градусов). Я погуглил и попал в некоторые темы, которые обсуждают об этом, но ни одна из нитей не получается с положительным ответом, и большинство статей, обсуждающих кватернион и эйлеровы углы, слишком много математики, чтобы запихнуть в мой мозг!

есть ли какой-то материал с открытым исходным кодом, который делает эту задачу легкой? Или кто-то написал код выполнить это преобразование?

изменить: Во-первых, извините за абстрактность!

Азимут-это направление на поверхности земли, в сторону которого указывает устройство. Как Север = 0 град, северо-восток = 45 град, Восток = 90 град, Юг = 180 град и так далее. Диапазоны от 0 град до 360 град:

enter image description here

высота-это угол, сделанный из плоскости земли к объекту в небе: enter image description here

спасибо,

Радж

1 ответов


используя CMDeviceMotion, вы можете получить объект CMAttitude с "ролл, шаг и рыскание" - где, например, учитывая телефон, проведенный в портретном режиме" рыскание " - "Азимут"," шаг "- это наклон телефона относительно Земли или Зенита, а" ролл " - это вектор, указывающий через экран, а не то, что вас интересует.

все становится немного сложнее, потому что "Азимут" - это проекция 3D-магнитного вектора (указывающего на магнитный Северный полюс) на плоскую " Землю" плоскость, которая изменяется в зависимости от ориентации устройства, но с учетом этого понимания терминов, потоков типа этот должно быть гораздо более понятным. Если вам нужно только ваше приложение для работы в одной ориентации, все становится намного проще.

П. С. "Высота" используется почти исключительно для обозначения высоту около данной ссылке (на уровне моря, высота и т. д.). "Зенит "или" шаг " предпочтительнее, и поскольку вы находитесь на iOS, вы должны придерживаться их координатная схема: (lat, lon, alt), (тангаж, рыскание, крен).