ACM OJ 2036 多边形面积计算

http://acm.hdu.edu.cn/showproblem.php?pid=2036
多边形面积公式推导:
使用二维向量求三角形的面积:对于三角形ABC ACM OJ 2036 多边形面积计算
文章图片

该题目中,取原点为三角形的一个点。
二维向量的叉乘公式为:ACM OJ 2036 多边形面积计算
文章图片
ACM OJ 2036 多边形面积计算
文章图片

如果A(x1,y1),B(x2,y2),那么S=(x1*y2-x2*y1) / 2

得出多边形的计算公式:
ACM OJ 2036 多边形面积计算
文章图片

【ACM OJ 2036 多边形面积计算】(由于叉乘有正负,可处理凹多边形的情况)


#include
#include
#include
#include
using namespace std;
struct point{
int x;
int y;
};

int main(){
int n;
vector p;
point temp;
double area;
while(cin >> n){
p.clear();
area = 0.0;
if(n == 0){
break;
}
else{
for(int i = 0; i < n; i++){
cin >> temp.x;
cin >> temp.y;
p.push_back(temp);
}
}
for(int i = 0; i < p.size() - 1; i++){
area += 0.5*(p[i].x * p[i+1].y - p[i+1].x * p[i].y);
}
area += 0.5*(p[p.size()-1].x * p[0].y - p[0].x * p[p.size()-1].y);
area = area >= 0 ? area: -area;
printf("%.1lf\n",area);
}
return 0;
}


    推荐阅读