携程预赛的时候有一题是几何问题,已知两点经纬度求球面距离。当时没有推导公式,直接网上搜搜了公式直接套用。。。
今天在高数课上想起同样的问题,就在课上推导了那个公式。。。
已知两点经纬度,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)