Угол в Мекку с текущего местоположения с помощью компаса iPhone - PullRequest
4 голосов
/ 19 марта 2012

У меня есть вопрос о направлении Qibla, я создаю приложение для iPhone, которое будет показывать как северное направление, так и направление Qibla, я показываю северное направление с помощью CLLocationManager и обновляю его с помощью CLHeading как newHeading.magnHeading, иЯ показываю направление Киблы со следующим кодом

double A = MECCA_LONGITUDE - lon;
double b = 90.0 - lat;
double c = 90.0 - MECCA_LATITUDE;
NSLog(@"tan -1( sin(%f) / ( sin(%f) * cot(%f) - cos(%f) * cos(%f)))", A, b, c, b, A);
double qibAngle =  atan(sin(A) /( sin(b) * (1 / tan(c)) - cos(b) * cos(A) ));
NSLog(@"qib Angle- %f",qibAngle);
qibla.transform = CGAffineTransformMakeRotation(qibAngle * M_PI /180);

Итак, здесь я получаю угол, но он не обновляет угол при повороте устройства. Может кто-нибудь помочь мне, я знаю, чтомне нужно что-то сделать с заголовком, но я не знаю, что делать?

Ответы [ 2 ]

1 голос
/ 19 марта 2012

Я предполагаю, что код, который вы разместили, вычисляет угол между географическим севером и направлением в сторону Мекки для текущего местоположения.Все, что вам нужно сделать сейчас, это принять во внимание заголовок пользователя.

Например, предположим, что пользователь расположен так, что Мекка находится прямо на западе, а пользователь смотрит прямо на восток.Поскольку tan возвращает +/- 90 градусов, угол киблы должен быть -90 градусов.Теперь настройка должна быть очевидной: вам нужно вычесть 90 градусов из угла киблы, соответствующего географическому северу (-90), чтобы получить (-180) градусов, то есть на сколько нужно повернуть пользователю, чтобы повернуться лицом к Мекке.

Проще говоря, вам нужно «отменить» отклонение пользователя, и вы делаете это, вычитая из угла киблы курс пользователя, который относительно географического севера.

С учетом математики изКстати, теперь вам нужно наблюдать за изменениями курса и пересчитывать угол киблы при изменении курса.Наконец, обязательно используйте свойство trueHeading.

1 голос
/ 19 марта 2012

Возможно, я потеряю баллы за этот ответ, потому что я абсолютно ничего не знаю о ios, но, я думаю, atan возвращает значение в радианах , а CGAffineTransformMakeRotation принимает свой аргумент в радианах как, поэтому преобразование qibAngle * M_PI /180 не требуется.

Возможно, вы также захотите переименовать ваше сообщение, так как большинство людей понятия не имеют, что такое Qibla, и не поймут, что речь идет о математике.и iOS.Я посмотрел только потому, что слышал, что вычисление правильного направления в Мекку - это просто математическая задача.

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