这是一道计算几何题目,用三小型分割多边形来求。开始我还比较迷糊,还想着考虑这考虑那,后来我发现根本不用考虑凹凸多边形的区别问题,因为有正有负,加起来结果必然是非负的。所以根本不用考虑那么多直接搞就行!或许在第n个点的时候要加到结果上的值是负的,但是在n+1,n+2...或者n+k个点的时候这个结果一定会补救回来,描述不太好描述,画个图理解理解就好了。挺好的题目。
1 #include <stdio.h> 2 struct point{ 3 int x,y; 4 }; 5 struct vec{ 6 int x,y; 7 }; 8 int mul_vec(vec a,vec b){ 9 return a.x*b.y - b.x*a.y; 10 } 11 double cal_vec(vec a,vec b){ 12 return (double)mul_vec(a,b)/2.0; 13 } 14 int main(){ 15 int n,i; 16 point t[200],t1,t2,t3; 17 vec v1,v2; 18 double res; 19 while(~scanf("%d",&n)&&n){ 20 res=0; 21 for(i=1;i<=n;++i){ 22 scanf("%d%d",&t[i].x,&t[i].y); 23 } 24 t1=t[1]; t2=t[2]; 25 t[n+1]=t[1]; 26 for(i=3;i<=n+1;++i){ 27 t3=t[i]; 28 v1.x=t2.x-t1.x; v1.y=t2.y-t1.y; 29 v2.x=t3.x-t2.x; v2.y=t3.y-t2.y; 30 res+=(double)cal_vec(v1,v2); 31 t2=t3; 32 } 33 printf("%.1lf ",res); 34 } 35 return 0; 36 37 38 }