关于已知两点经纬度求球面最短距离的公式推导(转载)
2013-11-25 16:43
411 查看
原文地址:http://blog.csdn.net/liminlu0314/article/details/8553926
看了原博主的文章,感觉很受用,所以转过来了
已知两点经纬度计算球面距离的公式,一搜一大堆,形式如下:
![](http://img.my.csdn.net/uploads/201301/29/1359462220_8273.jpg)
可是至于这个公式为什么是这样的,今天推导了一下,详细推导过程如下。首先画个图(图1),要不然空间想象能力差的话容易犯糊涂。首先对图1做个大致的说明,红色的半圆表示赤道,蓝色的圆弧表示本初子午线(也就是经度为0的子午线)。球最上方是北极点,点A和点B分别为要计算的两个点,坐标分别为A(jA,wA)和B(jB,wB)。
![](http://img.my.csdn.net/uploads/201301/29/1359462281_6873.png)
图1 示意图
再开始推导之前,我们需要在图中绘制一些辅助线,便于后面的描述和推导。如图1所示,A(jA,wA),B(jB,wB)两点分别为球面上的两点,坐标为经纬度表示。延A、B两点分别做垂直于赤道平面的垂线交赤道面为C、D两点。连接C、D两点,然后过A做CD的平行线交BD与点E。至此,所有的辅助线绘制完毕。假设地球为一个规则的圆球,半径为R(其实地球是一个椭球体,赤道的半径比极地的半径稍微大一点点)。
第一步:确定已知条件,
![](http://img.my.csdn.net/uploads/201301/29/1359462566_7538.jpg)
第二步:在直角
![](http://img.my.csdn.net/uploads/201301/29/1359462641_4953.jpg)
和直角
![](http://img.my.csdn.net/uploads/201301/29/1359462666_1313.jpg)
中有:
![](http://img.my.csdn.net/uploads/201301/30/1359549670_1930.jpg)
第三步:在平面ABCD中,有:
![](http://img.my.csdn.net/uploads/201301/29/1359462776_2756.jpg)
第四步:在直角
![](http://img.my.csdn.net/uploads/201301/29/1359462817_5325.jpg)
中,使用勾股定理可以得到AB的直线长度。如下:
![](http://img.my.csdn.net/uploads/201301/29/1359462859_5610.jpg)
第五步:这里需要引入一个公式(5),就是大名鼎鼎的余弦定理,假设三角形的三个角为A,B,C,则有:
![](http://img.my.csdn.net/uploads/201301/29/1359462922_3659.jpg)
把上面的公式(1)、(2)、(3)、(5)带入(4)中,然后整理可以得到:
![](http://img.my.csdn.net/uploads/201301/29/1359463000_2118.jpg)
最后,通过整理得到AB之间的直线距离为:
![](http://img.my.csdn.net/uploads/201301/29/1359463078_9010.jpg)
第六步:我们已经知道AB的直线距离,那么AB的弧长距离可以先通过计算
![](http://img.my.csdn.net/uploads/201301/29/1359463124_2704.jpg)
中对应的圆心角
![](http://img.my.csdn.net/uploads/201301/29/1359463184_3703.jpg)
,然后用弧长公式计算出来。这里在
![](http://img.my.csdn.net/uploads/201301/29/1359463124_2704.jpg)
依旧使用余弦定理公式(5),经过变形可以得到:
![](http://img.my.csdn.net/uploads/201301/29/1359463236_8993.jpg)
把式(6)带入式(7),化简得到:
![](http://img.my.csdn.net/uploads/201301/29/1359463282_9452.jpg)
最终,我们得到了一个关于圆心角
![](http://img.my.csdn.net/uploads/201301/29/1359463184_3703.jpg)
的余弦值的公式:
![](http://img.my.csdn.net/uploads/201301/29/1359463329_2731.jpg)
第七步:知道圆心角
![](http://img.my.csdn.net/uploads/201301/29/1359463184_3703.jpg)
,计算弧长的公式很简单,使用半径乘以圆心角(弧度单位)即可:
![](http://img.my.csdn.net/uploads/201301/29/1359463412_3662.jpg)
所以最后我们就得到了球面上AB的距离应该是:
![](http://img.my.csdn.net/uploads/201301/29/1359463465_8504.jpg)
最后使用公式(10)就可以编写代码来计算球面上任意两点间的最短距离了。这里使用的是一个规则的球来代替的椭球的,肯定会有误差的,一般都用这个公式来进行计算。代码就不写了,也就一两句话就出来了。最后需要注意的就是,需要把经纬度都化成弧度单位。
…………………………………………………华丽的分割线………………………………………………
……………………………………以下内容更新于2013年1月30日…………………………………………
昨天使用立体几何的知识推导了一下球面两点的距离公式,发现比较复杂,今天想到一个简单的方法,使用空间直角坐标系来推导,很方便。首先我们需要建立一个空间坐标系:在赤道平面内,X轴由球心O指向本初子午线,Y轴在赤道平面内垂直于X轴,Z轴垂直于赤道平面朝向北极。还是假设AB两点的经纬度坐标为:A(jA,wA),B(jB,wB)。由该坐标系的定义以及经纬度的定义可以把上面的AB两点的坐标转换为该坐标系中的坐标如下:
![](http://img.my.csdn.net/uploads/201301/30/1359547051_4617.jpg)
由两点距离公式可以得到AB的直线距离为:
![](http://img.my.csdn.net/uploads/201301/30/1359547105_9529.jpg)
对于球面上的任意一个点(X,Y,Z),都有:
![](http://img.my.csdn.net/uploads/201301/30/1359547143_1814.jpg)
把上面的公式整理就可以得到(下面用到了一个积化和差公式):
![](http://img.my.csdn.net/uploads/201301/30/1359547197_2257.jpg)
好了,大功告成,是不是比用立体几何要简单的多。接下来就是用上面的弦长和弧长的关系来计算AB的弧长就可以了。
看了原博主的文章,感觉很受用,所以转过来了
已知两点经纬度计算球面距离的公式,一搜一大堆,形式如下:
![](http://img.my.csdn.net/uploads/201301/29/1359462220_8273.jpg)
可是至于这个公式为什么是这样的,今天推导了一下,详细推导过程如下。首先画个图(图1),要不然空间想象能力差的话容易犯糊涂。首先对图1做个大致的说明,红色的半圆表示赤道,蓝色的圆弧表示本初子午线(也就是经度为0的子午线)。球最上方是北极点,点A和点B分别为要计算的两个点,坐标分别为A(jA,wA)和B(jB,wB)。
![](http://img.my.csdn.net/uploads/201301/29/1359462281_6873.png)
图1 示意图
再开始推导之前,我们需要在图中绘制一些辅助线,便于后面的描述和推导。如图1所示,A(jA,wA),B(jB,wB)两点分别为球面上的两点,坐标为经纬度表示。延A、B两点分别做垂直于赤道平面的垂线交赤道面为C、D两点。连接C、D两点,然后过A做CD的平行线交BD与点E。至此,所有的辅助线绘制完毕。假设地球为一个规则的圆球,半径为R(其实地球是一个椭球体,赤道的半径比极地的半径稍微大一点点)。
第一步:确定已知条件,
![](http://img.my.csdn.net/uploads/201301/29/1359462566_7538.jpg)
第二步:在直角
![](http://img.my.csdn.net/uploads/201301/29/1359462641_4953.jpg)
和直角
![](http://img.my.csdn.net/uploads/201301/29/1359462666_1313.jpg)
中有:
![](http://img.my.csdn.net/uploads/201301/30/1359549670_1930.jpg)
第三步:在平面ABCD中,有:
![](http://img.my.csdn.net/uploads/201301/29/1359462776_2756.jpg)
第四步:在直角
![](http://img.my.csdn.net/uploads/201301/29/1359462817_5325.jpg)
中,使用勾股定理可以得到AB的直线长度。如下:
![](http://img.my.csdn.net/uploads/201301/29/1359462859_5610.jpg)
第五步:这里需要引入一个公式(5),就是大名鼎鼎的余弦定理,假设三角形的三个角为A,B,C,则有:
![](http://img.my.csdn.net/uploads/201301/29/1359462922_3659.jpg)
把上面的公式(1)、(2)、(3)、(5)带入(4)中,然后整理可以得到:
![](http://img.my.csdn.net/uploads/201301/29/1359463000_2118.jpg)
最后,通过整理得到AB之间的直线距离为:
![](http://img.my.csdn.net/uploads/201301/29/1359463078_9010.jpg)
第六步:我们已经知道AB的直线距离,那么AB的弧长距离可以先通过计算
![](http://img.my.csdn.net/uploads/201301/29/1359463124_2704.jpg)
中对应的圆心角
![](http://img.my.csdn.net/uploads/201301/29/1359463184_3703.jpg)
,然后用弧长公式计算出来。这里在
![](http://img.my.csdn.net/uploads/201301/29/1359463124_2704.jpg)
依旧使用余弦定理公式(5),经过变形可以得到:
![](http://img.my.csdn.net/uploads/201301/29/1359463236_8993.jpg)
把式(6)带入式(7),化简得到:
![](http://img.my.csdn.net/uploads/201301/29/1359463282_9452.jpg)
最终,我们得到了一个关于圆心角
![](http://img.my.csdn.net/uploads/201301/29/1359463184_3703.jpg)
的余弦值的公式:
![](http://img.my.csdn.net/uploads/201301/29/1359463329_2731.jpg)
第七步:知道圆心角
![](http://img.my.csdn.net/uploads/201301/29/1359463184_3703.jpg)
,计算弧长的公式很简单,使用半径乘以圆心角(弧度单位)即可:
![](http://img.my.csdn.net/uploads/201301/29/1359463412_3662.jpg)
所以最后我们就得到了球面上AB的距离应该是:
![](http://img.my.csdn.net/uploads/201301/29/1359463465_8504.jpg)
最后使用公式(10)就可以编写代码来计算球面上任意两点间的最短距离了。这里使用的是一个规则的球来代替的椭球的,肯定会有误差的,一般都用这个公式来进行计算。代码就不写了,也就一两句话就出来了。最后需要注意的就是,需要把经纬度都化成弧度单位。
…………………………………………………华丽的分割线………………………………………………
……………………………………以下内容更新于2013年1月30日…………………………………………
昨天使用立体几何的知识推导了一下球面两点的距离公式,发现比较复杂,今天想到一个简单的方法,使用空间直角坐标系来推导,很方便。首先我们需要建立一个空间坐标系:在赤道平面内,X轴由球心O指向本初子午线,Y轴在赤道平面内垂直于X轴,Z轴垂直于赤道平面朝向北极。还是假设AB两点的经纬度坐标为:A(jA,wA),B(jB,wB)。由该坐标系的定义以及经纬度的定义可以把上面的AB两点的坐标转换为该坐标系中的坐标如下:
![](http://img.my.csdn.net/uploads/201301/30/1359547051_4617.jpg)
由两点距离公式可以得到AB的直线距离为:
![](http://img.my.csdn.net/uploads/201301/30/1359547105_9529.jpg)
对于球面上的任意一个点(X,Y,Z),都有:
![](http://img.my.csdn.net/uploads/201301/30/1359547143_1814.jpg)
把上面的公式整理就可以得到(下面用到了一个积化和差公式):
![](http://img.my.csdn.net/uploads/201301/30/1359547197_2257.jpg)
好了,大功告成,是不是比用立体几何要简单的多。接下来就是用上面的弦长和弧长的关系来计算AB的弧长就可以了。
相关文章推荐
- 关于已知两点经纬度求球面最短距离的公式推导
- 关于已知两点经纬度求球面最短距离的公式推导
- 关于已知两点经纬度求球面最短距离的公式推导
- 关于已知两点经纬度求球面最短距离的公式推导
- 关于已知两点经纬度求球面最短距离的公式推导
- 关于已知两点经纬度求球面最短距离的公式推导
- 关于已知两点经纬度求球面最短距离的公式推导
- 关于已知两点经纬度求球面最短距离的公式推导
- 关于已知两点经纬度求球面最短距离的公式推导
- 已知两点经纬度求球面最短距离的公式推导
- 已知两点经纬度和高度,求两点直线距离公式
- 根据经纬度计算地面两点间的距离-数学公式及推导
- 已知两点的经纬度,求某点到该两点的连线的最短距离
- 根据经纬度计算两点之间的距离的公式推导过程以及google.maps的测距函数
- 已知用经纬度表示的两点,求两点之间的直线距离
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- 通过两点经纬度计算两点距离的公式
- 已知地面上两点经续度求两点球面距离函数Flex及C
- [置顶] C语言实验题:已知地球上两点的经度和纬度求其球面距离
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程