皮克定理

对于每个顶点都落于整点上的多边形,有S = N + M/2 - 1(其中,S为多边形面积,N为多边形内部的整点数,M为多边形边上的点数) 该定理一般用于求N,因为S和M都相对好求。下面简单提一下S和M的求法。 对于多边形的面积,我们可以将其划分为若干三角形,然后用向量的叉积。 ```C++ inline ll cross(P a,P b) { return a.fi*b.se-b.fi*a.se; } ll area(P* p,int n) { ll res=0; p[n]=p[0]; for (int i=0;i<=n;++i) res+=cross(p[i],p[i+1]); return abs(res/2); } ``` 对于一条边上的点数,可以 ```C++ gcd( abs(p[i].fi - p[i-1].fi), abs(p[i].se - p[i-1].se) ) + 1; ``` 得到p[i]与p[i-1]之间的点数(包括两端点)。 求得S与M后,代入公式求得N。
posted @ 2018-09-14 02:50  __orange  阅读(709)  评论(0编辑  收藏  举报