计算几何模板(更新中......)
1 #include<bits/stdc++.h> 2 using namespace std; 3 const double pai=acos(-1),eps=1e-8; 4 struct DOT 5 { 6 double x,y; 7 DOT(double _x=0,double _y=0){x=_x,y=_y;} 8 DOT operator+(DOT a,DOT b) 9 { 10 return DOT(a.x+b.x,a.y+b.y); 11 } 12 DOT operator-(DOT a,DOT b) 13 { 14 return DOT(a.x-b.x,a.y-b.y); 15 } 16 DOT operator*(DOT a,double b) 17 { 18 return DOT(a.x*b,a.y*b); 19 } 20 };//点/向量的表示 21 struct LINE 22 { 23 DOT p,v; 24 LINE(){}; 25 LINE(DOT _p,DOT _v){p=_p,v=_v;} 26 };//直线 27 struct CIRCLE 28 { 29 DOT p;double r; 30 CIRCLE(){}; 31 CIRCLE(DOT _p,double _r){p=_p,r=_r;} 32 CIRCLE(double _x,double _y,double _r) 33 { 34 p=DOT(_x,_y),r=_r; 35 } 36 };//圆 37 struct POLYGON 38 { 39 int n; 40 DOT p[N]; 41 };//多边形 42 double dot(DOT a,DOT b){return a.x*b.x+a.y*b.y;}//点积 43 double cro(DOT a,DOT b){return a.x*b.y-a.y*b.x;}//叉积 44 double len(DOT a){return sqrt(dot(a,a));}//模长 45 double len2(DOT a){return dot(a,a);}//模长的平方 46 DOT adjust(DOT a,double b){return a*(b/len(a));}//调整模长 47 double shade(DOT a,DOT b){return dot(a,b)/len(b);}//投影长 48 bool direct(DOT a,DOT b){return cro(a,b)<=0;}//a在b逆时针为1 49 DOT perpendicular(DOT a){return DOT(a.y,-a.x);}//返回a右手向垂直向量 50 double dist(DOT a,DOT b){return len(a-b);}//a,b见距离 51 double disl(LINE a,DOT b){return fabs(cro(b-a.p,a.v)/len(a.v));} 52 bool crossline(LINE a,LINE b) 53 { 54 if(quick(LINE a,LINE b))return 1; 55 //未写完的快速排斥实验 56 }
生命中真正重要的不是你遭遇了什么,而是你记住了哪些事,又是如何铭记的。