Q:皮克定理这种一句话的东西为什么还要写学习笔记啊?

A:多好玩啊...

PS:除了蓝色字体之外都是废话啊...


 Part I

1.顶点全在格点上的多边形叫做格点多边形(坐标全是整数)

2.维基百科

Given a simple polygon constructed on a grid of equal-distanced points (i.e., points with integer coordinates) such that all the polygon's vertices are grid points, Pick's theorem provides a simple formula for calculating the area A of this polygon in terms of the number i of lattice points in the interior located in the polygon and the number b of lattice points on the boundary placed on the polygon's perimeter:[1]

3.看不懂英文?

S=a+b/2-1,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积。

证明:

1.先证明直角三角形和矩形 在逆用证明任意三角形,归纳法证明任意多边形

2.

From:http://www.matrix67.com/blog/archives/768

最酷的证明:Pick定理另类证法

难以想像,一段小小的证明竟然能比一个瘦小的留着长头发穿黑色短袖T恤紧身牛仔裤边跳边弹吉他的MM还要酷。原来一直以为这个证明已经很酷了,现在显然我已经找到了一个更酷的证明。
    Pick定理是说,假设平面上有一个顶点全在格点上的多边形P,那么其面积S(P)应该等于i+b/2-1,其中i为多边形内部所含的格点数,b是多边形边界上的格点数。绝大多数证明都是用割补的办法重新拼拆多边形。这里,我们来看一个另类的证明。
    假设整个平面是一个无穷大的铁板;在0时间,每个格点上都有一个单位的热量。经过无穷长时间的传导后,最终这些热量将以单位密度均匀地分布在整个铁板上。下面我们试着求多边形P内的热量。考虑多边形的每一条线段e:它的两个端点均在格点上,因此线段e的中点是整个平面格点的对称中心,因而流经该线段的热量收支平衡(这半边进来了多少那半边就出去了多少),即出入该线段的热量总和实际为0。我们立即看到,P的热量其实完全来自于它自身内部的i个格点(的全部热量),以及边界上的b个格点(各自在某一角度范围内传出的热量)。边界上的b个点形成了一个内角和为(b-2)*180的b边形,从这b个点流入P的热量为(b-2)*180/360 = (b-2)/2 = b/2-1。再加上i个内部格点,于是S(P)=i+b/2-1。

Part II

一条端点在格点上的线段覆盖的点数:

gcd(dx,dy) dxdy分别为线段横向占的点数和纵向占的点数

证明:自己随便想想就知道了,和这道题的思想有点像:http://www.cnblogs.com/candy99/p/6074673.html


于是就可以做裸题了....

POJ 2954 三角形内部格点数

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
typedef long long ll;
const int N=105;
const double eps=1e-8;
inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}return x*f;
}
inline int sgn(double x){if(abs(x)<eps) return 0;else return x<0?-1:1;
}
struct Vector{int x,y;Vector(int a=0,int b=0):x(a),y(b){}
};
typedef Vector Point;
Vector operator +(Vector a,Vector b){return Vector(a.x+b.x,a.y+b.y);}
int Cross(Vector a,Vector b){return a.x*b.y-a.y*b.x;
}int n,x,y,x2,y2,x3,y3,b,s;
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
int main(int argc, const char * argv[]){while(scanf("%d",&x)!=EOF){y=read();x2=read();y2=read();x3=read();y3=read();if(!x&&!y&&!x2&&!y2&&!x3&&!y3) break;b=s=0;b=gcd(abs(x2-x),abs(y2-y))+gcd(abs(x3-x2),abs(y3-y2))+gcd(abs(x3-x),abs(y3-y));s=abs(Cross(Vector(x2-x,y2-y),Vector(x3-x,y3-y)));printf("%d\n",(s-b+2)/2);}return 0;
}

POJ1265 给一个平面上的简单多边形,求边上的点,多边形内的点,多边形面积。

 

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
typedef long long ll;
const int N=105;
const double eps=1e-8;
inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}return x*f;
}
inline int sgn(double x){if(abs(x)<eps) return 0;else return x<0?-1:1;
}
struct Vector{int x,y;Vector(int a=0,int b=0):x(a),y(b){}
};
typedef Vector Point;
Vector operator +(Vector a,Vector b){return Vector(a.x+b.x,a.y+b.y);}
int Cross(Vector a,Vector b){return a.x*b.y-a.y*b.x;
}int n,x,y,b,s;
Point poly[N];
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
int main(int argc, const char * argv[]){int T=read(),cas=0;while(T--){b=s=0;n=read();for(int i=1;i<=n;i++){x=read();y=read();b+=gcd(abs(x),abs(y));poly[i]=poly[i-1]+Point(x,y);s+=Cross(poly[i],poly[i-1]);}s=abs(s);printf("Scenario #%d:\n",++cas);printf("%d %d %.1f\n\n",(s+2-b)/2,b,0.5*s);}return 0;
}

转载于:https://www.cnblogs.com/candy99/p/pick.html

poj12652954 [皮克定理 格点多边形]【学习笔记】相关推荐

  1. 行列式相关定理《线性代数》学习笔记)

    行列式相关定理 行列式的余子式 行列式的代数余子式 行列式的按行展开 异乘变零定理 拉普拉斯展开定理 行列式相乘定理 参考文献 行列式的余子式     行列式去掉某一元素 a i j a_{ij} a ...

  2. python 填充多边形 学习笔记

    笔记: 两个函数都只能填充凸多边形,凹多边形会丢失一部分内容,用人脸关键点做掩码时出现了这个情况. 函数可以用来填充凸多边形,只需要提供凸多边形的顶点即可. img = np.zeros((1080, ...

  3. 欧几里德算法与皮克定理

    欧几里德算法概述: 欧几里德算法 又称辗转相除法,用于计算两个整数a,b的最大公约数.其计算原理依赖于下面的定理: gcd函数就是用来求(a,b)的最大公约数的. gcd函数的基本性质: gcd(a, ...

  4. PointNet学习笔记(二)——支撑材料(理论证明)

    PointNet学习笔记(二)--支撑材料(理论证明) 这一部分记录了PointNet中两个定理的证明和博主的学习笔记.具体的定理可以参见论文学习笔记,这里仅给出证明.更新于2018.10.12. 文 ...

  5. 从零开始,SpreadJS新人学习笔记【第5周】

    复制粘贴.单元格格式和单元格类型 本周,让我们一起来学习SpreadJS 的复制粘贴.单元格格式和单元格类型,希望我的学习笔记能够帮助你们,从零开始学习 SpreadJS,并逐步精通. 在此前的学习笔 ...

  6. POJ 1265-Area(计算几何+皮克定理+多边形面积公式)

    题目地址:POJ 1265 题意:给定一个格点多边形,求出内部点数in,边上点数on,和面积S. 思路:运用的定理很多. 1.皮克定理:S=in+on/2-1,即in=(2*S+2-on)/2. 2. ...

  7. 格密码学习笔记(一)

    格密码学习笔记(一) \qquad随着当下量子计算机的研制的迅速进展,量子算法亦是相应得以巨大突破.在量子计算模型下,经典数论假设的密码体系(如大整数分解,计算有限域/椭圆曲线上的离散对数问题等),存 ...

  8. 【学习笔记】关于最大公约数(gcd)的定理

    [学习笔记]关于最大公约数(gcd)的定理 手动博客搬家: 本文发表于20181004 00:21:28, 原地址https://blog.csdn.net/suncongbo/article/det ...

  9. opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) 感兴趣区域传统绘制: openc ...

最新文章

  1. Conv1D和Conv2D的区别
  2. git ignore linux,为什么说.gitignore不能忽视
  3. ACMNO.49:一元三次方程求解(主要就是精度问题)
  4. 【Spring】Spring系列6之Spring整合Hibernate
  5. 无人化运维离我们有多远?阿里智能化运帷平台深度揭秘
  6. CF1054D-Changing Array【贪心】
  7. centos7更改管理员密码
  8. 计算机语言学家,著名计算语言学家冯志伟为人文学院师生作专题讲座
  9. Java案例:Log4J基本使用
  10. python语法报错_Python语法的常见错误和处理异常
  11. 服务器搭建成虚拟空间,服务器搭建虚拟空间
  12. 8位二进制数的原码、反码、补码以及它能表示的范围
  13. access tempvars 宏_Access数据库实用教程(第2版)第7章宏.ppt
  14. 高德 各省市区县poi及区划名称 代码/高德历史poi
  15. 通过eslint统一前端IDE的编码风格,避免git冲突
  16. 产品原型设计实战(一):产品设计相关工作
  17. Spark应用提交后一直不运行:hadoop-yarn ACCEPTED: waiting for AM container to be allocated, launched and registe
  18. 清明时节雨纷纷,路上行人欲断魂; 清明,请为逝去的亲人捎去祝福!
  19. Github如何快速找到优秀开源项目
  20. 群聊头像 - 取前五个用户头像生成一个新的头像

热门文章

  1. zabbix3.0安装过程记录
  2. 《最后期限》阅读笔记2
  3. ecshop订单打印页显示商品缩略图和序号
  4. 所谓的中间代码(ES5 的 “JSIL”)
  5. 以cisco 3550为例介绍IOS的恢复方法:
  6. WinAPI: GetSystemPowerStatus - 获取系统电源状态的信息
  7. VS2005使用點滴積累
  8. when will ifm open?
  9. how to find your partner
  10. 要找到现阶段最适合自己的方法