¿Calcular el ángulo entre dos vectores?

Estoy desarrollando una aplicación para iOS, que debe mostrar PDI (puntos de interés) según el encabezado del dispositivo. solíaCLLocationManager para obtener la ubicación del usuario y el título. Tengo un par de coordenadas de destino. En base a esto, estoy calculando qué trimestre es ese y devolviendo el valor flotante de la desviación del sur (0 grados) en grados. Tengo - / + 180 grados en el norte y 0 en el sur. Aquí está el fragmento de código:

-(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 ;
}

De alguna manera tengo una situación, cuando el objetivo está en el cuarto trimestre, pero está a -93 grados del sur. Estoy perdido y no tengo ni idea de cómo arreglar eso ...

editar: por trimestre me refiero al sistema de coordenadas cartesiano, donde + y es el norte, + x es el este y así sucesivamente!

p.s .: He leído que la brújula del iPhone es realmente mala, pero si es así, ¿cómo funciona correctamente la aplicación como Google Maps?

edit2: Me equivoqué con los ángulos. Oficialmente o tengo -90 grados en el este y 90 en el oeste.

Respuestas a la pregunta(3)

Su respuesta a la pregunta