[POJ2954]Triangle(计算几何-Pick定理)
2018-01-18 14:58
204 查看
题目:
我是超链接题意:
给出一个顶点都是整点的三角形,求三角形内部的整点的个数。题解:
一个计算点阵中顶点在格点上的多边形面积公式:S=a+b/2-1,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积。这题让我求a啊,2a=2S+2−b
这个S用叉积求
b的话,我们需要知道:端点是整点的线段内部如果有整点, 那线段一定是被内部的整点均匀分割的,最大公约数是几,就被分成相等的几段,b=gcd(Δy,Δx)+1−2
gcd求出几段,+1为含两端的整点数-2两端=中间的整点数
代码:
#include <cstdio> using namespace std; struct po { int x,y; po(int X=0,int Y=0){x=X; y=Y;} }; po operator -(po x,po y){return po(x.x-y.x,x.y-y.y);} int cj(po x,po y){return x.x*y.y-x.y*y.x;} int gcd(int a,int b){if (!b) return a;else return gcd(b,a%b);} int abs(int x){return (x>0)?x:-x;} int ds(po x,po y){return gcd(abs(x.y-y.y),abs(x.x-y.x))-1;} int main() { int x1,y1,x2,y2,x3,y3; while (scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3)) { if (!x1 && !y1 && !x2 && !y2 && !x3 && !y3) break; po a=po(x1,y1),b=po(x2,y2),c=po(x3,y3); int area=abs(cj(b-a,c-a)); int bb=3+ds(a,b)+ds(a,c)+ds(b,c); printf("%d\n",(area+2-bb)/2); } }
相关文章推荐
- pick定理的应用——简单的计算几何问题Triangle
- POJ 2954 Triangle(计算几何---Pick定理)
- poj 1265 Area【计算几何:叉积计算多边形面积+pick定理计算多边形内点数+计算多边形边上点数】
- POJ 1265 Area (计算几何)(Pick定理)
- Luogu P2735 电网【真·计算几何/Pick定理】By cellur925
- [POJ2954]Triangle(计算几何)
- POJ1265 Area (Pick定理,多边形面积,计算几何)
- Poj2954 Triangle (Pick定理)
- [POJ1265]Area(计算几何-Pick定理)
- poj2954 Triangle【Pick定理】
- POJ 1265 Area(计算几何Pick定理)
- Pick定理(很牛的定理)-求面积公式-计算几何
- POJ 2653 Pick-up sticks [线段相交]【计算几何】
- Zoj 3598 Spherical Triangle 【计算几何】【曲面三角形】
- uva 11178 morley定理(计算几何基础)
- HDU 1147 Pick-up sticks(计算几何 判断直线相交)
- POJ 2954-Triangle(计算几何+皮克定理)
- 【POJ】2954 Triangle(pick定理)
- POJ 2986 A Triangle and a Circle(计算几何)
- hdoj 1147 Pick-up sticks 计算几何