Pick 定理,1899年
設 Γ 為平面上以格子點為頂點之單純多邊形,則其面積為
![\begin{displaymath}A=\frac{b}{2}+i-1\eqno{(8)}\end{displaymath}](https://i-blog.csdnimg.cn/blog_migrate/a49083f43b2775c9bdc271e69198a8a0.gif)
其中 b 為邊界上的格子點數,i 為內部的格子點數。(8)式叫做 Pick 公式。
/*
*POJ 1265
*fuqiang
*几何,Pick定理
*2013/8/7
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn = 100+3;
int Abs(int n)
{
return n>0?n:-n;
}
struct Point
{
int x;
int y;
}p[maxn];
int gcd(int x, int y)
{
return y==0?x:gcd(y,x%y);
}
int grid_onedge(int n) //在线上的格点
{
int ret = 0;
for(int i = 0; i < n; i++)
{
ret += gcd(Abs(p[i].x-p[(i+1)%n].x), Abs(p[i].y-p[(i+1)%n].y));
}
return ret;
}
int grid_inside(int n)
{
int ret = 0;
for(int i = 0; i < n; i++)
{
ret += p[(i+1)%n].y * (p[i].x - p[(i+2)%n].x);
}
return Abs(ret);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
#endif
int T,Case = 1;
int n,a,b;
cin>>T;
while(T--)
{
cin>>n;
p[0].x = 0;
p[0].y = 0;
for(int i = 1; i <= n; i++)
{
cin>>a>>b;
p[i%n].x = p[i-1].x + a;
p[i%n].y = p[i-1].y + b;
}
int E = grid_onedge(n);
int I = (grid_inside(n)-E)/2+1; //内部格点数
double A = E/2.0 + I -1;
printf("Scenario #%d:\n%d %d %.1f\n\n",Case++,I,E,A);
}
return 0;
}
1
平面上的多邊形,有各式各樣的面積公式,端視所給的數據而定。除了本文所介紹的 Pick 公式之外,還有 Heron 公式與測量師公式,構成三足鼎立的求面積三個重要公式。 |
2
對於三角形的情形,如果已知三邊的長為 a,b,c,令 ![]() 推廣到四邊形,有兩種情形(詳見參考資料11.蔡聰明,〈四邊形的面積〉,《數學傳播》第十七卷第三期 民國八十二年)
|
3
在上述三類公式中,要以測量師公式最具推廣潛力,因為它可以「連續化」。例如: 平面上逆時針方向的封閉曲線 x=x(t), y=y(t), ![]() 若再推廣,就得到著名的 Green 定理,而溶匯入微積分的數學主流。這好像是一條大河,一路上匯集各支流,最後終於流入大海 。 |