根据经纬度计算范围_遗传算法可视化项目(插曲):关于距离的计算

今天暂时先不讲遗传算法,我要解决的是TSP问题,具体什么TSP问题之前文章里讲过了,大家可以点一下历史消息或者这里:

遗传算法可视化项目(1):概述

遗传算法可视化项目(2):获取信息

遗传算法可视化项目(3):创建图的数据结构

TSP问题里面除了算法还有一个重要的东西,就是距离,一般情况下计算两点之间距离直接用公式:√(Δx²+Δy²),可是我之前爬到的数据是经纬度,两地距离没有这么简单,因为毕竟是球面上两点的距离,不是平面,这里我不用网上的那个推导出来的公式,我一步步推导,首先以地球球心为原点,赤道平面为xOy平面,建立xyz三维坐标系,我在这里就默认东经是[0°,180°],西经是[-180°,0°](反过来也没事),北纬[0°,90°],南纬[-90°,0°](反过来没问题),假设第一个点经纬度是(α1,β1),第二个点经纬度是(α2,β2)(α1,α2对应经度值;β1,β2对应纬度值)。很明显第一个点转换成为三维坐标是(cosα1,sinα1,sinβ1),第二个点转换成为三维坐标也就是(cosα2,sinα2,sinβ2),点可以看成是向量,直接利用:

cosθ=两向量数量积/两向量模长的乘积

这个公式求出两向量夹角的余弦值cosθ,然后再利用反余弦函数arccos求出θ,不需要进行平移啥的,arccos函数值域是[0,π],向量夹角也是这个范围,最后利用公式L=|θ|*r(θ一定要是弧度制!r是地球平均半径,不平均还真的有点难处理)求得弧长,也就是所谓的球面上两点的距离!

接下来说一下昨天文章中遗留下来的MAX取多大的值的问题,设置成10的话上面那个公式完全不能用,最小值应该比地球平均半径*π(也就是半圈)要大,这个值很明显比10大很多,但为什么我要用10是因为我感觉就海南岛那一小块地方,球面可以近似的看成平面(如果不能看成平面用上面那个方法),然后就是那个距离公式(√(Δx²+Δy²)),然后我编写程序算了一下经纬度的差,代码和运行结果如下:

3757fde1618fcf32372a2614d7182bb8.png

7f7a3cd17169245a4c45376f33422a47.png

很明显,令Δx=经度差,Δy=纬度差,代入√(Δx²+Δy²)这个距离公式,结果小于10,所以我可以用10表示不可达!

不管用什么方法,明天遗传算法大家也就只是距离计算方式不同,但最后得出来的最短路径都差不多那样!文章最后附上项目地址:https://github.com/3480430977/DataVisualizationOfGA

最后欢迎大家扫码关注

65d41d1832df7e5cd34bb8a544fabc90.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值