HDU2036 多邊形面積模板

利用向量叉乘:三角形ABC面積可以利用向量  (↑AB) ×(↑AC)*(1/2)得出,對於多邊形,可以隨意選取多邊形某一點爲源點然後一次計算.對於如下:

的多邊形


我們可以以P1爲扇面中心,連接P1Pi就得到N-2個三角形,由於凸性,保證這些三角形全在多邊形內,那麼,這個凸多邊形的有向面積:

     A=sigma(Ai)  (i=1N-2)




#include <stdio.h>
#include <math.h>
typedef struct node
{
	double x,y;
}node;
node s[1001];

double cal(node x,node y,node z)
{
	return (y.x-x.x)*(z.y-x.y)-(y.y-x.y)*(z.x-x.x);
}
int main()
{
	int n,i;
	double res;
	while(scanf("%d",&n)&&n)
	{
		res=0;
		for(i=0;i<n;i++)
			scanf("%lf%lf",&s[i].x,&s[i].y);
		for(i=1;i<n-1;i++)
			res+=cal(s[0],s[i],s[i+1]);
		printf("%.1lf\n",res/2.0);
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章