ACM OJ 2036 多边形面积计算

http://acm.hdu.edu.cn/showproblem.php?pid=2036

多边形面积公式推导:

使用二维向量求三角形的面积:对于三角形ABC S=0.5 * |\vec{AB} * \vec{AC}|

该题目中,取原点为三角形的一个点。

二维向量的叉乘公式为:a(x_{}1,y_{} 1 ) b (x_{}2,y_{} 2 )     a*b=x_{}1y_{} 2-x_{}2y_{} 1

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

 

得出多边形的计算公式:

S=0.5 * |x_{}1y_{} 2-x_{}2y_{} 1+x_{}2y_{} 3-x_{}3y_{} 2+...+x_{}ny_{} 1-x_{}1y_{} n|

(由于叉乘有正负,可处理凹多边形的情况) 


#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;
}
 
 

你可能感兴趣的:(ACM)