![](/img/trans.png)
[英]Get angle between phone's z axis and the magnetic north pole (instead of y axis)
[英]Get angle between two point(LatLng) with vertical axis (north axis)
目前,我在Google地图上有两个点(LatLng)A和B。 我以图像如下显示我的问题:
沿垂直轴旋转设备时,我想在点A和B之间获得角度@
我想获得AB与北轴(y轴)之间的角度。我该怎么做。 我创建了一个获取角度的函数,但它返回null :(
public double getAngleTwoPoint(LatLng point1,LatLng point2){
double lat1=point1.latitude;
double lat2=point2.latitude;
double long1=point1.longitude;
double long2=point2.longitude;
double deltaLong=long2-long1;
double angle = Math.atan2(Math.sin(deltaLong)*Math.cos(lat2), Math.cos(lat1)*Math.sin(lat2)-Math.sin(lat1)*Math.cos(lat2)*Math.cos(deltaLong));
return Math.toDegrees(angle);
}
您可以使用此公式来获取经纬度之间的夹角。
θ= atan2(sin(Δlong)* cos(lat2),cos(lat1)* sin(lat2)-sin(lat1)* cos(lat2)* cos(Δlong))
注意,在使用此公式和Δlong= long2-long1之前,应将角度(θ)转换为弧度。
atan2是几乎所有编程语言(大多数在Math软件包中)中发现的常见函数。 通常,还有用于度和弧度之间转换的函数(也在Math软件包中)。
请记住,atan2返回的值在-π... +π范围内,以将结果转换为罗盘方位,您需要将θ乘以180 /π然后使用(θ+ 360)%360,其中%是模数除法操作返回除法的其余部分。
以下链接是涉及纬度和经度的公式的一个很好的资源。 他们还提供公式的Javascript实现。 实际上,答案基于此页面上的信息:
如果你有三角形
CB
A
那么AB与y轴之间的夹角等于CAB夹角。 tg(CAB)= BC / AC,您需要角度,所以实际上您想要的是arctg(BC / AC)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.