hdu2036

这是一道计算几何题目,用三小型分割多边形来求。开始我还比较迷糊,还想着考虑这考虑那,后来我发现根本不用考虑凹凸多边形的区别问题,因为有正有负,加起来结果必然是非负的。所以根本不用考虑那么多直接搞就行!或许在第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 }
原文地址:https://www.cnblogs.com/symons1992/p/3403750.html