lat1*=pi/180,lat2*=pi/180;
returnacos(cos(lat1)*cos(lat2)*cos(dlng)sin(lat1)*sin(lat2));
}
double line_dist(double r,doublelng1,double lat1,double lng2,double lat2){
doubledlng=fabs(lng1-lng2)*pi/180;
while(dlng>=pipi)
dlng-=pipi;
if(dlng>pi)
dlng=pipi-dlng;
lat1*=pi/180,lat2*=pi/180;
returnr*sqrt(2-2*(cos(lat1)*cos(lat2)*cos(dlng)sin(lat1)*sin(lat2)));
}
inline double sphere_dist(double r,doublelng1,double lat1,double lng2,double lat2){
returnr*angle(lng1,lat1,lng2,lat2);
}
#include <math.h>
struct point{double x,y;};
struct line{point a,b;};
double distance(point p1,point p2){
returnsqrt((p1.x-p2.x)*(p1.x-p2.x)(p1.y-p2.y)*(p1.y-p2.y));
}
point intersection(line u,line v){
pointret=u.a;
doublet=((u.a.x-v.a.x)*(v.a.y-v.b.y)-(u.a.y-v.a.y)*(v.a.x-v.b.x))
/((u.a.x-u.b.x)*(v.a.y-v.b.y)-(u.a.y-u.b.y)*(v.a.x-v.b.x));
ret.x=(u.b.x-u.a.x)*t;
ret.y=(u.b.y-u.a.y)*t;
returnret;
}
point circumcenter(point a,point b,pointc){
lineu,v;
u.a.x=(a.xb.x)/2;
u.a.y=(a.yb.y)/2;
u.b.x=u.a.x-a.yb.y;
u.b.y=u.a.ya.x-b.x;
v.a.x=(a.xc.x)/2;
v.a.y=(a.yc.y)/2;
v.b.x=v.a.x-a.yc.y;
v.b.y=v.a.ya.x-c.x;
returnintersection(u,v);
}
point incenter(point a,point b,point c){
lineu,v;
doublem,n;
u.a=a;
m=atan2(b.y-a.y,b.x-a.x);
n=atan2(c.y-a.y,c.x-a.x);
u.b.x=u.a.xcos((mn)/2);
u.b.y=u.a.ysin((mn)/2);
v.a=b;
m=atan2(a.y-b.y,a.x-b.x);
n=atan2(c.y-b.y,c.x-b.x);
v.b.x=v.a.xcos((mn)/2);
v.b.y=v.a.ysin((mn)/2);
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-34960-30.html
为显得不这么势利