Вычислить угол между двумя векторами?

m разработка приложения для iOS, которое должно отображать POI (достопримечательности) в зависимости от заголовка устройства. я использовалCLLocationManager чтобы получить пользователярасположение и курс. У меня есть одна пара назначениякоординаты Исходя из этого яm вычисляя, какая четверть равна, и возвращая значение отклонения от юга (0 градусов) в градусах. У меня - / + 180 градусов на севере и 0 на юге. Вот фрагмент кода:

-(float)updateTargetLongitude:(float)lon Latitude:(float)lat{
//    //longitude = x
//    //latitude = y
      NSLog(@"current location = (%.5f, %.5f)", [[NSUserDefaults standardUserDefaults] doubleForKey:@"currentLongitude"], [[NSUserDefaults standardUserDefaults] doubleForKey:@"currentLatitude"]);
      float x = lon - [[NSUserDefaults standardUserDefaults] doubleForKey:@"currentLongitude"];
      float y = lat - [[NSUserDefaults standardUserDefaults] doubleForKey:@"currentLatitude"];
      float angle;
      NSLog(@"Searching angle from source (%.5f, %.5f) to destination (%.5f, %.5f)", locationManager.location.coordinate.longitude, locationManager.location.coordinate.latitude, lon, lat);
      if (x == 0 && y == 0) {
          NSLog(@"you're there already!");
          return -0.1;
      }
      if(x == 0 && y > 0){
          NSLog(@"look north");
          angle = 180.0;
      }
      if (x == 0 && y < 0) {
          NSLog(@"look south");
          angle = 0;
      }
      if (x > 0 && y == 0) {
          NSLog(@"look east");
          angle = 90.0;
      }
      if (x < 0 && y == 0) {
          NSLog(@"look west");
          angle = -90;
      }
      if (x > 0 && y > 0) {
          NSLog(@"first quarter");
          angle = -atan2f(y, x) - M_PI_2;
      }
      if (x < 0 && y > 0) {
          NSLog(@"second quarter");
          angle = atan2f(y, x) + M_PI_2;
      }
      if (x < 0 && y < 0) {
          NSLog(@"third quarter");
          angle = atan2f(x, y);
      }
      if (x > 0 && y < 0) {
          NSLog(@"fourth quarter");
          angle = -atan2f(x, y);
      }
      NSLog(@"returning radians angle = %.4f for (%.5f, %.5f) :: degrees = %.3f", angle, y, x, angle * 180 / M_PI);
      return angle * 180 / M_PI ;
}

Почему-то у меня ситуация, когда цель находится в четвертом квартале, но на юге -93 градуса. Я'Я потерян, и я непонятия не имею, как это исправить ...

редактировать: под кварталом я подразумеваю декартову систему координат, где + y - север, + x - восток и так далее!

пс .: яВы читали, что компас на iPhone действительно плох, но если да, то как работает приложение, такое как Google maps?

edit2: Я ошибся с углами. Официально o имеет -90 градусов на востоке и 90 градусов на западе.

Ответы на вопрос(3)

Ваш ответ на вопрос