叉乘
任何一个多边形,可以化成多个三角形相乘。
每个三角形可以使用叉乘求出平行四边形再除以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; }
你若是天才,我便是疯子