球面两点间的球面距离的计算

球面两点间的球面距离的计算

 

实际上这是一个很简单的问题,今天之所以把他提出来并作出解决方案,是因为昨天在讨论项目的时候,项目lead提出计算地球球面上两点的球面距离是很难的,实际上是一个很简单的立体几何的计算。另一方面,权当作是练习一下C/C++语言,并且锻炼一下自己的设计能力吧。

 

1.  提出问题

已知球面的两点,为了方便起见,以经纬度来唯一标识点的位置(相关概念请参照2.相关预备知识),要求计算出它们的球面距离。

 

 

2.  相关预备知识

这儿提到的预备知识是地球的相关知识,如形状和大小、纬度和经度等相关概念。

1)形状和大小:

地球形状是一个两极部位略扁的不规则的球体。地球的平均半径为6371千米,赤道半径6378千米,极半径6357千米。赤道周长约为4万千米。

2)纬线和纬度、经线和经度

        纬线:纬线都是圆,也称为纬线圈,长度不等。赤道最长,由赤道向两极逐渐缩短,最后成一点。纬线指示东西方向。

        纬度:赤道是零度纬线。赤道以北的纬度,叫北纬,用“N”作代号;赤道以南的纬度叫南纬,用“S”作代号。北纬、南纬各有90°。

        经线:也叫子午线。经线是半圆,所有经线长相等。经线指示南北方向。

        经度:零度经线叫做本初子午线。从本初子午线向东、向西各分作180度,以东的180°属于东经,用“E”作代号;以西的180°属于西经,用“W”作代号。

东西180°经线合为一条经线。

20°W和160°E的经线圈,将地球分为东、西两个半球。


 

3.  解决方案





 

如上图,先假设球的半径为R,所给定的2点为AB两点,先假设A在北半球,B在南半球。这只是其中的一种情况,至于其它的情况可以同样的方法计算出,仅仅是大同小异而已。当然,还有特殊情况也不能忘了哦。

假设球心为点O,那么最后得到的AOB的弧度乘以球的半径R即为所求的球面距离。

设经过球的南极和北极的极点的直线为l,分别过点BAl的垂线,设垂点分别为DC

过点C作线BD的平行线BCD的平行线,这两条平行线必定相交,设交点为E,容易证明BDCE是一个矩形。

由于AB点的经纬度已知,所以OBDOAC也已知,设分别为βα,由于半径R已知,所以|BD| = R * cosβ|AC| = R * cosα|OD| = R * sinβ|OC| = R * sinα

由于点AB的经度已知,所以不难求出ACE的值。所以三角形ACE中不难用余弦定理求出|AE|的值。

在直角三角形ABE中,容易求出AB的值。此时三角形AOB三条边都已知,所以AOB也可以用余弦定理求出来,这样AB的球面距离也迎刃而解了。

 

呵呵,高一下学期学的立体几何,现在做起来竟然还有点吃力。本来想今天顺便把代码写出来,算了,好晚了,明天再写吧。

睡觉,忽忽!

 

(To be continued)

你可能感兴趣的:(1-技术相关)