awk一行代码求球面两点之间的距离
作者:互联网
输入文件格式如下:
# longitude1 latitude1 longitude2 latitude2
球面距离公式原理如下:
球坐标系转为直角坐标系,用两点间距离公式求出,然后将直线距离转为大圆弧距离。
1 cat input.xyz | awk 'BEGIN{ 2 pid=0.01745329 3 }NR!=1{ 4 z=sin($2*pid); 5 x=cos($2*pid)*cos($1*pid); 6 y=cos($2*pid)*sin($1*pid); 7 zz=sin(pid*$4); 8 xx=cos($4*pid)*cos($3*pid); 9 yy=cos($4*pid)*sin($3*pid); 10 dis=sqrt((xx-x)^2+(yy-y)^2+(zz-z)^2); 11 ans=atan2(0.5*dis, sqrt(1-dis*dis/4))/pid*2 ; 12 print ans 13 }' > output.xyz
标签:cos,球面,xyz,pid,距离,awk,两点,sin,dis 来源: https://www.cnblogs.com/liangxuran/p/15912054.html