首页 > 其他 > 详细

求任意多边形面积

时间:2020-06-28 16:08:23      阅读:55      评论:0      收藏:0      [点我收藏+]

按逆时针方向依次给出多边形 \(n\) 个顶点,求多边形的面积。

公式:

\[Area=\frac{1}{2}|\sum\limits_{i=1}^{n}\overrightarrow{OP_i}\times \overrightarrow {OP_{i+1}}| \]

(其中 \(P_{n+1}=P_1\)

不太会证明可以感性理解。任取一点 \(O\),可以发现多边形内的面积被扫过一遍,多边形外的面积被扫过两边(其中一正一负抵消)。然后你直接取 \(O\) 在原点很方便。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>

using namespace std;

const int N=100009;
const double eps=1e-10;
int n;
struct Point
{
	double x,y;
	
	Point() {}
	Point(double X,double Y) : x(X),y(Y) {}
	Point operator - (const Point a)const { return Point(x-a.x,y-a.y); }
	double operator * (const Point a)const { return x*a.y-y*a.x; }
	void read() { scanf("%lf %lf",&x,&y); }
	void print() { printf("%.2lf %.2lf\n",x,y); }
}a[N],Q;

int nxt(int x) { return x==n?1:x+1; }

void init()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
		a[i].read();
}

void work()
{
	double area=0;
	for (int i=1;i<=n;i++)
		area+=(a[i]*a[nxt(i)])/2;
	printf("%.2lf\n",area);
}

int main()
{
	init();
	work();
	return 0;
}

求任意多边形面积

原文:https://www.cnblogs.com/With-penguin/p/13202977.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!