其他分享
首页 > 其他分享> > awk一行代码求球面两点之间的距离

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