球面

来源:互联网 发布:网络视频收视率 编辑:程序博客网 时间:2024/04/28 16:15
#include <math.h>const double pi=acos(-1);//计算圆心角lat表示纬度,-90<=w<=90,lng表示经度//返回两点所在大圆劣弧对应圆心角,0<=angle<=pidouble angle(double lng1,double lat1,double lng2,double lat2){    double dlng=fabs(lng1-lng2)*pi/180;    while (dlng>=pi+pi)        dlng-=pi+pi;    if (dlng>pi)        dlng=pi+pi-dlng;    lat1*=pi/180,lat2*=pi/180;    return acos(cos(lat1)*cos(lat2)*cos(dlng)+sin(lat1)*sin(lat2));}//计算距离,r为球半径double line_dist(double r,double lng1,double lat1,double lng2,double lat2){    double dlng=fabs(lng1-lng2)*pi/180;    while (dlng>=pi+pi)        dlng-=pi+pi;    if (dlng>pi)        dlng=pi+pi-dlng;    lat1*=pi/180,lat2*=pi/180;    return r*sqrt(2-2*(cos(lat1)*cos(lat2)*cos(dlng)+sin(lat1)*sin(lat2)));}//计算球面距离,r为球半径inline double sphere_dist(double r,double lng1,double lat1,double lng2,double lat2){    return r*angle(lng1,lat1,lng2,lat2);}
0 0
原创粉丝点击