模板題
1 #include2 #include3 #include4 #include5 #include6 #include7#define lson l,mid,rt<<1
8#define rson mid+1,r,rt<<1|1
9#define root 1,n,1
10#define mid ((l+r)>>1)
11#define ll long long
12#define cl(a) memset(a,0,sizeof(a))
13#define ts printf("*****\n");
14using
namespace
std;
15const
int maxn=199999+9;16
int sum[maxn<<2],lsum[maxn<<2],rsum[maxn<<2
];17
intn,m,tt;
18const
double eps = 1e-8;19
const
double pi = acos(-1.0
);20
int sgn(double
x)21
26struct
point
2730 point(double _x,double
_y)31
34 point operator -(const point &b)const
3538
//叉積
39double
operator ^(const point &b)const
4043
//點積
44double
operator *(const point &b)const
4548
//繞原點旋轉角度b(弧度值),後x,y的變化
49void transxy(double
b)50
55};
56//
57struct
line
5861
line(point _s,point _e)
6265
//兩直線相交求交點
66//
第乙個值為0表示直線重合,為1表示平行,為0表示相交,為2是相交
67//
只有第乙個值為2時,交點才有意義
68 pair operator &(const line &b)const
6977
double t = ((s-b.s)^(b.s-b.e))/((s-e)^(b.s-b.e));
78 res.x += (e.x-s.x)*t;
79 res.y += (e.y-s.y)*t;
80return make_pair(2
,res);81}
82};
83bool
onseg(point p,line l)
8490
bool
inter(line l1,line l2)
91100
//*判斷點在任意多邊形內
101//
射線法,poly的頂點數要大於等於3,點的編號0~n-1
102//
返回值103
//-1:點在凸多邊形外
104//
0:點在凸多邊形邊界上
105//
1:點在凸多邊形內
106int inpoly(point p,point poly,int
n)107
126else
if(onseg(side.e,ray))
127130
else
if(inter(ray,side))
131 cnt++;
132}
133if(cnt % 2 == 1)return1;
134else
return -1
;135
}136
137point a[maxn],b;
138int
main()
139150 scanf("
%d",&m);
151for(i=0;i)
152158
else printf("
no\n");
159}
160}
161 }
hdu1756 判斷點是否在多邊形上
在計算幾何中,判斷點是否在多邊形上包括點在多邊行上,點在多邊形內兩種情況 如下,模板題 include include include include include include include include include include include include define n 1...
HDU1756 判斷點與多邊形的相對位置
題意 判斷點是否在給出的多邊形內 包括邊界 include include include include using namespace std const double eps 1e 8 判斷double型別 x 與0的大小 int dcmp double x int n,m,i,j,k,tem...
判斷點在多邊形內演算法
點和多邊形關係的演算法實現 好了,現在我們已經了解了向量叉積的意義,以及判斷直線段是否有交點的演算法,現在回過頭看看文章開始部分的討論的問題 如何判斷乙個點是否在多邊形內部?根據射線法的描述,其核心是求解從p點發出的射線與多邊形的邊是否有交點。注意,這裡說的是射線,而我們前面討論的都是線段,好像不適...