0

这是我使用的公式:

 double lat1 = [self getRadiansFromDegress:self.LocationLatitude];
    double lat2 = [self getRadiansFromDegress:PointOfInterest.latitude];

    double x = sin(lonDiff) * cos(lat2);
    double y = cos(lat1)*sin(lat2) - sin(lat1)*cos(lat2)*cos(longDiff);

    double bearingRad = atan2(x,y);
    double bearingDeg = [self getDegreesFromRadians:bearingRad];
    NSLog(@"Bearing: %f", bearingDeg);

对于 lat1 = 30.61

lat2 = 30.620954

lon1 = -96.342

lon2 = -96.345238

longDiff = -0.003238

根据这个网站:http ://www.yourhomenow.com/house/havesine.html我应该得到大约 345 度,但我的代码返回 -86.028010 度。谁能明白为什么这如此不同?

4

1 回答 1

0

在 atan2 中,您交换了 x 和 y。正确的顺序是 y,x:

更正为

double bearingRad = atan2(y, x);

也可以看看:

#include <math.h>
double atan2( double y, double x );
于 2013-08-02T13:07:40.363 回答