Cálculo de rolamentos entre dois CLLocationCoordinate2Ds
Problema muito "simples": considerando dois CLLocationCoordinate2Ds, como posso obter o rolamento (em radianos) do primeiro para o segundo? Eu fiz muita pesquisa e estudo sobre isso, tanto o problema geral quanto o Objective-C / Cocoa Touch / iOS especificamente.
Aqui está minha implementação:
- (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));
}
No entanto, esse método não está retornando resultados consistentes para mim. Se o rolamento estiver próximo ao norte ou sul, parece bom, no entanto, qualquer outra direção parece retornar dados inconsistentes, por exemplo:
De 50.405018, 8.437500
Para 51.339802, 12.403340
Meu método retorna: 5.918441 radianos
Devem ser 1.18660576 radianos
(Vejohttp://www.movable-type.co.uk/scripts/latlong.html ehttp://www.movable-type.co.uk/scripts/latlong-map.html?lat1=50.405018&long1=8.437500&lat2=51.339802&long2=12.403340)
Eu verifiquei duas e três vezes a fórmula está correta. Também verifiquei vários valores como o exemplo acima, alguns corretos, outros errados. Eu brinquei com vários módulos ou limites do valor de retorno, também sem sorte.
Alguma ideia? Existe algum problema com o meu código? Talvez eu tenha entendido algo errado sobre como as funções matemáticas funcionam.