杭电acm2036:凹凸多边形面积

来源:互联网 发布:ubuntu u盘安装 编辑:程序博客网 时间:2024/05/24 02:21

不能用劳伦公式求面积,没有考虑到凹多边形的情况。
以原点为三角形一个顶点,找多边形上逆时针相方向邻的两个点为依次为三角形的另两个顶点,用叉乘法求三角形面积。
叉乘求面积是有方向,即正负的,但逆时针选点所求面积为正。
逆时针选点的终点为首尾相连。

#include <iostream>using namespace std;struct points{    int x;    int y;};int main(){    //p为原点,也可以为任意点    points p;    p.x = 0;    p.y = 0;    points a[100];    int n;    while (cin >> n&&n != 0){        double res = 0.0;        for (int i = 0; i < n; i++){            cin >> a[i].x >> a[i].y;        }        for (int j = 0; j < n - 1; j++){            //偷懒没有把p点带进来,若p为任意点,向量坐标表示要把p点坐标代进去            res += a[j].x*a[j + 1].y - a[j].y*a[j + 1].x;        }        //保证逆时针首尾相连        res += a[n-1].x*a[0].y - a[n-1].y*a[0].x;        res /= 2;        cout.precision(1);        cout << fixed << res << endl;    }    return 1;}
原创粉丝点击