携程预赛的时候有一题是几何问题,已知两点经纬度求球面距离。当时没有推导公式,直接网上搜搜了公式直接套用。。。
今天在高数课上想起同样的问题,就在课上推导了那个公式。。。
已知两点经纬度,A(wA,jA)B(wb,jB)
以下使用均为弧度制。。。。。。(图片是网上搜的,不存在侵权哈。。。)
//由图可知//角AOC=wA//角BOD=wB//角COD=jB-jA(<=180度)//AC=R*sin(wA)//OC=R*cos(wA)//BD=R*sin(wB)//OD=R*cos(wB)
//由AB^2=AE^+BE^2 和 CD^2=OC^2+OD^2-2*OC*OD*cos(角COD)//可推导出AB的距离方程
接下来就可以再次利用余弦定理求圆心角AOB,从而求出弧长。。。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
还有另外一种方式推导,用空间直角坐标表示。。。
在以球心为原点建立空间直角坐标系,那么A,B两点可以用坐标表示。。。
使用向量夹角公式 cos<夹角> = 两向量之积 / 两向量模的乘积 <夹角> = arccos( 两向量之积 / 两向量模的乘积 )
//那么AB两点的球心角arccos(Xa/R*Xb/R+Ya/R*Yb/R+Za/R*Zb/R)//两点球面距离就是R*arccos(Xa/R*Xb/R+Ya/R*Yb/R+Za/R*Zb/R)