叉乘

任何一个多边形,可以化成多个三角形相乘。

每个三角形可以使用叉乘求出平行四边形再除以2。

原理是在平面上取(0,0)来分割多边形为多个三角形,然后用叉乘来求三角形的面积(有向)再求和。

这样的话可以把凸N多边形转化为N个三角形,然后求解N个三角形即可,输入顶点的顺序     (无论是顺时针还是逆时针均可)

* 题目要求:计算多边形面积

* 方法:把n多边形分割成n-2个三角形,分别求和,然后相加

* 注意:分割的所有三角形有一个公共的顶点,这里选择0点位公共点 

* 注:题中给出的点的顺序为逆时

* 叉乘的性质:设两向量P和Q 

* 1.P ×Q > 0 则Q在P的逆时针方向 

* 2.P ×Q < 0 则Q在P的顺时针方向

* 3.P ×Q = 0 则Q和P共线,方向可能相同也可能不相同 

 

#include <iostream>
#include <cstdio>
using namespace std;

struct node
{
    int  x,y;
} data[105];

double area(node a,node b)
{
    return a.x*b.y-a.y*b.x;
}

int main()
{
    int n;
    double sum;
    while(cin>>n&&n)
    {
        for(int i=0;i<n;i++)
        cin>>data[i].x>>data[i].y;
        sum=area(data[n-1],data[0]);//注意这个位置!!
        for(int i=1;i<n;i++)
        {
            sum+=area(data[i-1],data[i]);
        }

        printf("%.1lf\n",sum*0.5);
    }
    return 0;
}

 

posted @ 2016-04-14 21:20  邻家那小孩儿  阅读(386)  评论(0编辑  收藏  举报