根据经纬度计算范围_遗传算法可视化项目(插曲):关于距离的计算
今天暫時(shí)先不講遺傳算法,我要解決的是TSP問題,具體什么TSP問題之前文章里講過了,大家可以點(diǎn)一下歷史消息或者這里:
遺傳算法可視化項(xiàng)目(1):概述
遺傳算法可視化項(xiàng)目(2):獲取信息
遺傳算法可視化項(xiàng)目(3):創(chuàng)建圖的數(shù)據(jù)結(jié)構(gòu)
TSP問題里面除了算法還有一個(gè)重要的東西,就是距離,一般情況下計(jì)算兩點(diǎn)之間距離直接用公式:√(Δx2+Δy2),可是我之前爬到的數(shù)據(jù)是經(jīng)緯度,兩地距離沒有這么簡單,因?yàn)楫吘故乔蛎嫔蟽牲c(diǎn)的距離,不是平面,這里我不用網(wǎng)上的那個(gè)推導(dǎo)出來的公式,我一步步推導(dǎo),首先以地球球心為原點(diǎn),赤道平面為xOy平面,建立xyz三維坐標(biāo)系,我在這里就默認(rèn)東經(jīng)是[0°,180°],西經(jīng)是[-180°,0°](反過來也沒事),北緯[0°,90°],南緯[-90°,0°](反過來沒問題),假設(shè)第一個(gè)點(diǎn)經(jīng)緯度是(α1,β1),第二個(gè)點(diǎn)經(jīng)緯度是(α2,β2)(α1,α2對應(yīng)經(jīng)度值;β1,β2對應(yīng)緯度值)。很明顯第一個(gè)點(diǎn)轉(zhuǎn)換成為三維坐標(biāo)是(cosα1,sinα1,sinβ1),第二個(gè)點(diǎn)轉(zhuǎn)換成為三維坐標(biāo)也就是(cosα2,sinα2,sinβ2),點(diǎn)可以看成是向量,直接利用:
cosθ=兩向量數(shù)量積/兩向量模長的乘積
這個(gè)公式求出兩向量夾角的余弦值cosθ,然后再利用反余弦函數(shù)arccos求出θ,不需要進(jìn)行平移啥的,arccos函數(shù)值域是[0,π],向量夾角也是這個(gè)范圍,最后利用公式L=|θ|*r(θ一定要是弧度制!r是地球平均半徑,不平均還真的有點(diǎn)難處理)求得弧長,也就是所謂的球面上兩點(diǎn)的距離!
接下來說一下昨天文章中遺留下來的MAX取多大的值的問題,設(shè)置成10的話上面那個(gè)公式完全不能用,最小值應(yīng)該比地球平均半徑*π(也就是半圈)要大,這個(gè)值很明顯比10大很多,但為什么我要用10是因?yàn)槲腋杏X就海南島那一小塊地方,球面可以近似的看成平面(如果不能看成平面用上面那個(gè)方法),然后就是那個(gè)距離公式(√(Δx2+Δy2)),然后我編寫程序算了一下經(jīng)緯度的差,代碼和運(yùn)行結(jié)果如下:
很明顯,令Δx=經(jīng)度差,Δy=緯度差,代入√(Δx2+Δy2)這個(gè)距離公式,結(jié)果小于10,所以我可以用10表示不可達(dá)!
不管用什么方法,明天遺傳算法大家也就只是距離計(jì)算方式不同,但最后得出來的最短路徑都差不多那樣!文章最后附上項(xiàng)目地址:https://github.com/3480430977/DataVisualizationOfGA
最后歡迎大家掃碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的根据经纬度计算范围_遗传算法可视化项目(插曲):关于距离的计算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis支持驼峰自动转换sql吗_
- 下一篇: 怎么把数字替换成空格_剑指offer04