Très "simple" problème: étant donnés deux CLLocationCoordinate2Ds, comment puis-je obtenir le roulement (comme radians) de la première à la seconde? J'ai fait beaucoup de recherche et d'étude sur ce, à la fois le problème général et Objective-C/Cocoa Touch/iOS spécifiquement.
Voici mon oeuvre:
- (float) getHeadingForDirectionFromCoordinate:(CLLocationCoordinate2D)fromLoc toCoordinate:(CLLocationCoordinate2D)toLoc
{
float fLat = fromLoc.latitude;
float fLng = fromLoc.longitude;
float tLat = toLoc.latitude;
float tLng = toLoc.longitude;
return atan2(sin(fLng-tLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(fLng-tLng));
}
Cependant, cette méthode n'est pas de retour consistante résultats pour moi. Si le roulement est à proximité au nord ou au sud, il semble bien, cependant, toute autre direction semble renvoyer incompatible données, par exemple:
De 50.405018, 8.437500
Pour 51.339802, 12.403340
Ma méthode retourne: 5.918441 radians
Devrait être 1.18660576 radians
(voir http://www.movable-type.co.uk/scripts/latlong.html et http://www.movable-type.co.uk/scripts/latlong-map.html?lat1=50.405018&long1=8.437500&lat2=51.339802&long2=12.403340)
J'ai le double et le triple vérifié la formule est correcte. J'ai également vérifiés au hasard un tas de valeurs comme l'exemple ci-dessus, une bonne, une mauvaise. J'ai joué avec les modulos ou de délimitation de la valeur de retour, aussi pas de chance.
Des idées? Est-il un problème avec mon code? Peut-être que j'ai mal compris quelque chose à propos de la façon dont les fonctions mathématiques de travail?