hdu 2036 - 改革春风吹满地(计算几何)
题意:求解多边形面积
解法:
先了解数学上“叉积”的含义与性质:
三角形ΔABC的面积为:
我们可以依次计算每个三角形的面积,ΔABC,ΔACE,ΔEF … …
所有三角形的面积之和为整个多边形的面积.
每次计算由A0,Ai,Ai+1组成的三角形
代码:
1: #include<stdlib.h>
2: #include<string.h>
3: #include<stdio.h>
4: #include<math.h>
5: #define N 101
6: struct point{
7: int x;
8: int y;
9: }array[N];
10: int main(){
11: int n,i;
12: while(scanf("%d",&n)!=EOF && n){
13: double sum=0;
14: for(i=0;i<n;i++){
15: scanf("%d %d",&array[i].x,&array[i].y);
16: }
17: for(i=1;i<n-1;i++){
18: int ax=array[i].x-array[0].x;
19: int ay=array[i].y-array[0].y;
20: int bx=array[i+1].x-array[0].x;
21: int by=array[i+1].y-array[0].y;
22:
23: //很奇怪,加上ABS,就WA了
24: sum+=ax*by-bx*ay; //计算叉积,再求和
25: }
26: printf("%.1lf\n",sum/2);
27: }
28: }