iOS компас навигация

Я делаю приложение для iPhone для себя и коллег, чтобы найти наши устройства. Он включает в себя компас, который указывает на север, и стрелку, которая указывает на данную координату устройства.

Однако у меня проблемы с наведением иглы на устройство. Я использую следующий код, чтобы попытаться создать "треугольник" и рассчитать "количество радиан" по заданному северу от компаса, чтобы я мог повернуть стрелку с севера на "величину", смещенную от треугольника C.

triangleA = curLocation.coordinate.latitude - setLocation.coordinate.latitude;
if(triangleA < 0) { east = NO; } else { east = YES; }
triangleB = curLocation.coordinate.longitude - setLocation.coordinate.longitude;
if(triangleB < 0) { north = NO; } else { north = YES; }

float tempC = pow(fabs(triangleA),2) + pow(fabs(triangleB),2);

triangleC = sqrtf(tempC);

Однако треугольник С не содержит радианы между -360 и 360.

Вместе с этим у меня есть еще один вопрос. Есть ли какая-то приватная структура для получения текущего местоположения пользователя? Потому что обычный locationManager имеет довольно большое смещение мин. 5 метров

Я надеюсь, что кто-то может указать мне правильное направление для получения правильных "радианов" с севера.

1 ответ

Решение

Вместо использования теоремы Пифагора вы можете использовать триг. Сначала получите разницу между x и y ваших очков

float x = curLocation.coordinate.latitude - setLocation.coordinate.latitude;
float y = curLocation.coordinate.longitude - setLocation.coordinate.longitude;

Затем используйте арктангенс, чтобы получить угол.

float angle = atan2(y,x);

Если вы хотите все положительные значения, добавьте эту строку:

if(angle<0) angle += 2.0*M_PI;

Затем, если вы хотите использовать градусы (0-360) вместо радианов, конвертируйте, используя следующую строку:

angle = angle * (180/M_PI);   

И для твоих логических значений. Вы будете указывать на восток, когда угол больше 270° или меньше 90°. Вы будете указывать на север, когда угол между 0 ° и 180°.

east = (angle >= 270) || (angle <= 90);
north = (angle >= 0) && (angle <= 180);
Другие вопросы по тегам