计算几何模板(更新中......)

 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 }

 

posted @ 2018-03-03 21:01  大奕哥&VANE  阅读(174)  评论(1编辑  收藏  举报