HDU 2036 改革春风吹满地 数学题

解题报告:

题目大意:给出一个多边形的各个定点的直角坐标,求出这个多边形的面积,给各个定点坐标时是按照逆时针顺序给出的。

这题麻烦的地方就是给出的多边形可以的凹的,如果不是这样就可以拆成多个三角形的面积的和,我一开始就是这样错了。

然后我听说线性代数里面有一个叫叉乘的方法可以求多边形的面积的方法,虽然我不能证明为什么这样可以,但这样的确太简单了,最后我还是用了,

叉乘就是利用把相邻的两个点的坐标进行叉乘,叉乘也就是求它们的向量积,然后把它们都加起来就可以了,最后要注意一点的是最后一点要跟第一个点叉乘一次,因为是相邻的点都要叉乘一次。

 1 #include<cstdio>
 2 
 3 int d[105][2];
 4 int main() {
 5     int n;
 6     while(scanf("%d",&n)&&n!=0)  {
 7         for(int i=1;i<=n;++i)
 8         scanf("%d%d",&d[i][0],&d[i][1]);
 9         d[n+1][0]=d[1][0],d[n+1][1]=d[1][1];
10         double sum=0;
11         for(int i=1;i<=n;++i)
12         sum+=d[i+1][0]*d[i][1]-d[i][0]*d[i+1][1];
13         if(sum<0)
14         sum*=-1.0;
15         printf("%.1lf\n",sum/2.0);
16     }
17     return 0;
18 }
View Code
原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3084774.html