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

 

上一篇:uni-app中页面部分内容使用索引列表(uni-indexed-list),动态数据


下一篇:计算机了解