凸多边形的面积问题

Q:给定顶点坐标,求凸多边形的面积,保留两位小数。

样例输入:

4

3 3

3 0

1 2

1 0

样例输出

5.00

S:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
double dist(struct point A,struct point B);
//该子函数用于求两点间的距离
double square(double a,double b,double c);
//该子函数用于求任意三角形的面积
struct point
//该结构体用于保存点的信息,包括横、纵坐标
{
	double x,y;
};
int main()
{
	double a,b,c;//三角形的三条边
	double temp;//三角形的面积
	double S=0;//总面积
	int i;
	int n;//表示要求的多边形为n边形
	struct point *P;
	P=(point*)malloc(sizeof(point));
	scanf("%d",&n);
	for(i=0;i<n;i++)
	//输入多边形顶点坐标
	{
		scanf("%lf%lf",&P[i].x,&P[i].y);
	}
	for(i=1;i<n-1;i++)
	//n边形可被分割为(n-2)个三角形
	{
		if(i==1)//只需要单独求一次a,之后有:a’=c
			a=dist(P[i],P[0]);
		b=dist(P[i],P[i+1]);
		c=dist(P[i+1],P[0]);
		temp=square(a,b,c);
		S+=temp;//累加总面积
		a=c;//a’=c
	}
	free(P);
	printf("%.2lf\n",S);//输出结果
	return 0;
}
double dist(struct point A,struct point B)
{
	double s;
	//////////////////
	double a=A.x;
	double b=B.x;
	double c=A.y;
	double d=B.y;
	//////////////////这四行使代码简洁
	s=sqrt((a-b)*(a-b)+(c-d)*(c-d));
	//两点间距离公式
	return s;
}
double square(double a,double b,double c)
{
	double p;
	double S;
	////////////////////////////
	p=(a+b+c)/2;
	S=sqrt(p*(p-a)*(p-b)*(p-c));
	////////////////////////////海伦公式
	return S;
}
时间: 2024-10-13 20:57:14

凸多边形的面积问题的相关文章

任意凸多边形的面积

求任意凸多边形的面积 法则是(逆时针坐标乘积-顺时针坐标乘积)÷2 [(x1*y2+x2*y3+x3*y4+x4*y5+x5*y1)-(x1*y5+x2*y1+x3*y2+x4*y3+x5*y4)]/2 #include <cstdio> int main() { double x[100],y[100],s=0; int n,i; scanf("%d",&n); for(i=1; i<=n; i++) scanf("%lf%lf",&am

poj 3384 Feng Shui 半平面交的应用 求最多覆盖凸多边形的面积的两个圆 的圆心坐标

题目来源: http://poj.org/problem?id=3384 分析: 用半平面交将多边形的每条边一起向"内"推进R,得到新的多边形(半平面交),然后求多边形的最远两点. 代码如下: const double EPS = 1e-10; const int Max_N = 105 ; struct Point{ double x,y; Point(){} Point(double x, double y):x(x),y(y){} Point operator - (Point

codevs:1249 多边形的面积(多边形面积计算模板)

题目描述 Description 给出一个简单多边形(没有缺口),它的边要么是垂直的,要么是水平的.要求计算多边形的面积. 多边形被放置在一个X-Y的卡笛尔平面上,它所有的边都平行于两条坐标轴之一.然后按逆时针方向给出各顶点的坐标值.所有的坐标值都是整数(因此多边形的面积也为整数). 输入描述 Input Description 输入文件第一行给出多边形的顶点数n(n≤100).接下来的几行每行给出多边形一个顶点的坐标值X和Y(都为整数并且用空格隔开).顶点按逆时针方向逐个给出.并且多边形的每一

swust oj--凸包面积

题目链接:    http://acm.swust.edu.cn/problem/0249/ 麦兜是个淘气的孩子.一天,他在玩钢笔的时候把墨水洒在了白色的墙上.再过一会,麦兜妈就要回来了,麦兜为了不让妈妈知道这件事情,就想用一个白色的凸多边形把墙上的墨点盖住.你能告诉麦兜最小需要面积多大的凸多边形才能把这些墨点盖住吗? 现在,给出了这些墨点的坐标,请帮助麦兜计算出覆盖这些墨点的最小凸多边形的面积. Description 多组测试数据.第一行是一个整数T,表明一共有T组测试数据. 每组测试数据的

有向面积

有向面积是矢量,它大小等于面积,但是带有方向,可以用右手定则求出方向.有向面积可以很方便的在坐标系中求出凸多边形的面积,及点与凸多边形的位置关系. 以三角形为例: 三角形的有向面积: Double area(double x0,double y0,double x1,double y1,double x2,double y2){ Return xo*y1+y0*x2+x1*y2-x2*y1-x0*y2-x1*y0 ; } 上面得到的即是顶点为A(x0,y0),B(x1,y1),C(x2,y2)的

多边形面积的求法

学了高数的同学,会学到向量的外积,也可知道它有一个用途,可以求三角面积. •外积的几何意义:α和β所张成的平行四边形的有向面积 •由求三角形面积的方法可以推广求凸多边形面积,如图,从一固定点出发,向其他各点引辅助线,这样就分割成了若干个三角形,利用上式求出每个三角形的面积再相加即可. 代码实现: 不过这种方法有局限性,只能求凸多边形的面积,对于凹多边形似乎就不可以了. 这里再提供一种凸凹都合适的求法,不过我也不太懂,如果哪位大神看到了,就不吝赐教一下,现在这里谢过了. •double Area(

BZOJ 1845 CQOI 2005 三角形面积并 扫描线

题目大意:给出一些三角形,求这些三角形面积的并. 思路:应该可以辛普森积分,但是应该会很麻烦.. 以前扫描线就写过矩形的用数据结构维护的那种,和计算几何不占边,这次才是好好写了一次正宗的扫描线.不得不说这个算法还是很靠谱的. 其实这个思路不仅限于三角形面积的并,所有凸多边形的面积并应该都可以解决. 对于任意由线段组成的图形,对这个图形进行多次的划分,总可以将这个图形划分成梯形,面积也很好计算.那么按照什么划分呢?将所有三角形的边都求交点,不难发现,以这些点为划分依据的话,相邻两点之间一定是一个或

凹凸度

最小外接凸多边形.最大内接凸多边形.凹凸度 最小外接凸多边形指连接部分凸点形成的包含原图的凸多边形, 最大内接凸多边形指连接部分凸点和凹点形成的包含在原图中的最大凸多边形. ?如下给出例子. ?凹凸度(concavo-convex)是反映物体形状凹凸程度的一个重要度量定义如下: ? –其中,Sc是最小外接凸多边形的面积,Sr是最大内接凸多边形的面积. 利用凹凸度,可以识别物体的姿态,如飞禽类的飞.栖,走兽类的卧.站.奔跑等. 凹凸度,布布扣,bubuko.com

codeforces #313 div1 D

好神的题目! 首先我们运用pick定理A=S-B/2+1将要求的东西转化掉 之后分离变量,我们变成了求选取凸包面积的期望和求选取凸包在边界上的点的期望 我们先考虑求选取凸包面积的期望 如何计算凸多边形的面积,我们可以原点为划分点,计算凸包上的每个向量的叉积的和 如何计算凸包边界上的点,我们可以计算凸包上的每个向量上的点 那么我们可以考虑每个向量被计算的概率 显然p(i)-p(i+k)这个向量被计算的概率为(2^(n-k-1)-1)/(2^n-1-n-n*(n-1)/2)次 这样我们就可以O(n^