我正在开发一个使用AR技术的iPhone应用程序,并且正在创建自己的框架,但是我在尝试获取第二个坐标相对于当前设备位置的角度时遇到了困难,有没有好的资源可以帮助我解决这个问题呢?
提前感谢!
我正在开发一个使用AR技术的iPhone应用程序,并且正在创建自己的框架,但是我在尝试获取第二个坐标相对于当前设备位置的角度时遇到了困难,有没有好的资源可以帮助我解决这个问题呢?
提前感谢!
如果两点足够接近且远离极点,你可以使用一些简单的三角函数:
float dy = lat2 - lat1;
float dx = cosf(M_PI/180*lat1)*(long2 - long1);
float angle = atan2f(dy, dx);
编辑:我忘了提到latN
和longN
— 以及dx
和dy
— 可以是以度或弧度为单位,只要不混合使用。然而angle
将始终以弧度返回。当然,如果你将其乘以180/M_PI,你可以将其转换为度数。
import com.google.android.maps.GeoPoint;
public double calculateAngle(GeoPoint startPoint, GeoPoint endPoint) {
double lat1 = startPoint.getLatitudeE6() / 1E6;
double lat2 = endPoint.getLatitudeE6() / 1E6;
double long2 = startPoint.getLongitudeE6() / 1E6;
double long1 = endPoint.getLongitudeE6() / 1E6;
double dy = lat2 - lat1;
double dx = Math.cos(Math.PI / 180 * lat1) * (long2 - long1);
double angle = Math.atan2(dy, dx);
return angle;
}
atan2f(dy, dx)
与任何好的数学文本中找到的公式atan(y/x)密切对应)。你的基础可能在地理空间工作中是一种已经建立的规范,我们应该遵循这种规范才能获得纯粹的好处。如果你能提出这样的论点(并附上链接),而不是只是说我错了并指责支持者,我会全力支持你(即使现在你这么做,我仍然可能支持你)。 - Marcelo Cantos