算起來還挺複雜的
地球的經緯度座標是球座標(x,y),x是經度,y是緯度
先把它轉換成直角座標(X,Y,Z)
設地球半徑為r
則有轉換式:
X=r*cos(y)*cos(x)
Y=r*cos(y)*sin(x)
Z=r*sin(y)
分別得到A(x1,y1),B(x2,y2)兩點的直角座標A(X1,Y1,Z1),B(X2,Y2,Z2)
那麼AB兩點間直線距離是L=√[(X2-X1)^2+(Y2-Y1)^2+(Z2-Z1)^2]
把上面轉換式代入化簡可以得到L=r*√[2-2cos(y1)*cos(y2)*cos(x1-x2)-2sin(y1)*sin(y2)]
設AB兩點對球心所夾圓心角為θ(弧度),則有L=2r*sin(θ/2)=2r*√[(1-cosθ)/2]=r*√[2*(1-cosθ)]
因此cosθ=1-L^2/(2r^2)=cos(y1)*cos(y2)*cos(x1-x2)+sin(y1)*sin(y2)
那麼弧長=r*θ
=r*arccos[cos(y1)*cos(y2)*cos(x1-x2)+sin(y1)*sin(y2)]
這裡的經緯度用角度弧度均可,因為都要代入三角函式,但arccos得到的θ必須用弧度
算起來還挺複雜的
地球的經緯度座標是球座標(x,y),x是經度,y是緯度
先把它轉換成直角座標(X,Y,Z)
設地球半徑為r
則有轉換式:
X=r*cos(y)*cos(x)
Y=r*cos(y)*sin(x)
Z=r*sin(y)
分別得到A(x1,y1),B(x2,y2)兩點的直角座標A(X1,Y1,Z1),B(X2,Y2,Z2)
那麼AB兩點間直線距離是L=√[(X2-X1)^2+(Y2-Y1)^2+(Z2-Z1)^2]
把上面轉換式代入化簡可以得到L=r*√[2-2cos(y1)*cos(y2)*cos(x1-x2)-2sin(y1)*sin(y2)]
設AB兩點對球心所夾圓心角為θ(弧度),則有L=2r*sin(θ/2)=2r*√[(1-cosθ)/2]=r*√[2*(1-cosθ)]
因此cosθ=1-L^2/(2r^2)=cos(y1)*cos(y2)*cos(x1-x2)+sin(y1)*sin(y2)
那麼弧長=r*θ
=r*arccos[cos(y1)*cos(y2)*cos(x1-x2)+sin(y1)*sin(y2)]
這裡的經緯度用角度弧度均可,因為都要代入三角函式,但arccos得到的θ必須用弧度