0

我正在为自己和同事制作一个 iPhone 应用程序来定位我们的设备。它涉及指向北方的指南针和指向设备给定坐标的指针。

但是,我无法将针头指向设备。我正在使用以下代码尝试创建一个“三角形”并从给定的罗盘北计算“弧度数量”,因此我可以将针从北旋转到从三角形C偏移的“数量”偏移。

triangleA = curLocation.coordinate.latitude - setLocation.coordinate.latitude;
if(triangleA < 0) { east = NO; } else { east = YES; }
triangleB = curLocation.coordinate.longitude - setLocation.coordinate.longitude;
if(triangleB < 0) { north = NO; } else { north = YES; }

float tempC = pow(fabs(triangleA),2) + pow(fabs(triangleB),2);

triangleC = sqrtf(tempC);

然而,三角形 C 不包含介于 -360 和 360 之间的“弧度”。

除此之外,我还有另一个问题。是否有任何私有框架来获取用户的当前位置?因为正常的 locationManager 有一个非常大的最小偏移量。5米。

我希望有人能指出我正确的方向,以便从北方获得正确的“弧度”。

4

1 回答 1

1

除了使用勾股定理之外,您还可以使用 trig。首先得到你的点的x和y之间的差异

float x = curLocation.coordinate.latitude - setLocation.coordinate.latitude;
float y = curLocation.coordinate.longitude - setLocation.coordinate.longitude;

然后使用反正切得到角度。

float angle = atan2(y,x);

如果您想要所有正值,请添加以下行:

if(angle<0) angle += 2.0*M_PI;

然后,如果您想使用度数 (0-360) 而不是弧度,请使用以下行进行转换:

angle = angle * (180/M_PI);   

对于你的布尔值。当角度大于 270° 或小于 90° 时,您将指向东方。当角度在 0° 和 180° 之间时,您将指向北方。

east = (angle >= 270) || (angle <= 90);
north = (angle >= 0) && (angle <= 180);
于 2014-05-09T16:18:18.620 回答