由顶点坐标计算任意多边形面积

我们知道,如果三角形的一个顶点在原点,另两点A(x1 , y1)和B(x2 , y2)

则其面积可以表示为

SABC =0.5× |OA|×|OB|×sin(∠AOB)

=0.5×|OA×OB|

=0.5×|(x1,y1)×(x2,y2)|

=0.5×[(x1y2)-(y1x2)]

以下图中的三角形ABC为例,欲求SABC

从原点,将ABC以向量形式表示

因此SABC = SOBC-SOAC-SOAB

=SABC = SOBC + (-SOAC) + (-SOAB)

这样直接求ABC的面积转化为了求三个部分三角形的面积和,而分割出来的每个三角形的都有一个顶点为原点,且另外两个点信息均已知。

由于存在逆时针计算或者顺时针计算顶点的问题,所以上式中的正负号代表了正面积和反面积,不过不需要特别考虑,因为总大小是一样的,只需要求绝对值即可。

所以上述三角形面积

SABC=0.5×|(x1y2-x2y1)+(x2y3-y2x3)+(x3y1-y3x1)|

扩展到多边形

S = 0.5×|(x1y2-x2y1)+(x2y3-y2x3)+(x3y4-y3x4) + ...... + (xny1-ynx1)|

对于凹多边形也适用,凹陷的部分会被计算为负面积被减掉。

练习题:(HDU2036)[http://acm.hdu.edu.cn/showproblem.php?pid=2036]

原文地址:https://www.cnblogs.com/velscode/p/10390497.html

时间: 2024-11-03 21:56:45

由顶点坐标计算任意多边形面积的相关文章

根据坐标计算任意多边形的面积

公式: 实际操作中,有一点需要注意,例如从a[0]-a[n-1]保存了n个点的坐标信息,累加求和之前,一定不能忘了a[n]=a[0],然后从1操作到n,例如: 1 double getarea(){ 2 double sum = 0.0; 3 a[n] = a[0]; 4 for(int i = 1;i<=n;i++){ 5 sum += a[i].x*a[i-1].y-a[i-1].x*a[i].y; 6 } 7 return sum/2.0; 8 } 这样,就不会漏掉计算最后一个点与第一个生

eoj1127 计算几何 任意多边形面积

题目:eoj1127 " 改革春风吹满地, 不会算法没关系; 实在不行回老家, 还有一亩三分地. 谢谢!(乐队奏乐)" 话说部分学生心态极好,每天就知道游戏,这次考试如此简单的题目,也是云里雾里,而且,还竟然来这么几句打油诗. 好呀,老师的责任就是帮你解决问题,既然想种田,那就分你一块. 这是一块多边形形状的田,原本是Partychen的,现在就准备送给你了.不过,任何事情都没有那么简单,你必须首先告诉我这块地到底有多少面积,如果回答正确才能真正得到这块地. 发愁了吧?就是要让你知道,

计算任意多边形的面积

对于凸多边形,很容易计算,如下图,以多边形的某一点为顶点,将其划分成几个三角形,计算这些三角形的面积,然后加起来即可.已知三角形顶点坐标,其三角形积可以利用向量的叉乘来计算. 对于凹多边形,如果还是按照上述方法划分成三角形,如下图,多边形的面积 = S_ABC + S_ACD + S_ADE, 这个面积明显超过多边形的面积. 我们根据二维向量叉乘求三角形ABC面积时,利用的是 这样求出来的面积都是正数,但是向量叉乘是有方向的,即 是有正负的,如果把上面第三个公式中的绝对值符号去掉,即 ,那么面积

ZOJ 1010 Area 求任意多边形面积

主要判断是否是多边形:1.n<3 : 2.非相邻两条线段不相交 #include <iostream> #include <cmath> #include <stdio.h> using namespace std; #define eps 1e-8 int sig(double x) { if(x<-eps) return -1; if(x>eps) return 1; return 0; } struct point { double x,y; }

HDU 2036 求任意多边形面积向量叉乘

三角形的面积可以使用向量的叉积来求: 对于 三角形的面积 等于: [(x2 - x1)*(y3 - y1)- ( y2 - y1 ) * ( x3 - x1 )  ] / 2.0 但是面积是有方向的,对于一个多边形,我们任意选取一点(通常选取 0,0),和多边形的定点相连接, 对于顺序排列的顶点,我们求原点和一对相邻的顶点组成的三角形的叉积,将这些叉积的一半累加起来 由于叉积的方向,在多边形外面的部分会抵消,这样就是多边形的面积了. 最后对结果要取绝对值,因为算出来的叉积有可能是负数: 附上例题

求任意多边形面积 python实现

数学解决方法: 多边形外选取一点,连接各点构成三角形,计算求和......  详细链接  http://blog.csdn.net/hemmingway/article/details/7814494 已知三角形三边长,求三角形面积------>海伦公式  链接:http://www.zybang.com/question/29d209e9732d1f1f6a6de35b94edd3ba.html 由上实现下面python代码   源代码出处  链接: http://blog.csdn.net/

计算任意的多边形面积

计算任意多边形的面积 对于凸多边形,很容易计算,如下图,以多边形的某一点为顶点,将其划分成几个三角形,计算这些三角形的面积,然后加起来即可.已知三角形顶点坐标,三角形面积可以利用向量的叉乘来计算. image 对于凹多边形,如果还是按照上述方法划分成三角形,如下图,多边形的面积 = S_ABC + S_ACD + S_ADE, 这个面积明显超过多边形的面积. image 我们根据二维向量叉乘求三角形ABC面积时,利用的是 image 这样求出来的面积都是正数,但是向量叉乘是有方向的,即image

利用向量积(叉积)计算三角形的面积和多边形的面积

利用向量积(叉积)计算三角形的面积和多边形的面积: 向量的数量积和向量积: (1)  向量的数量积   (1)  向量的向量积 两个向量a和b的叉积(向量积)可以被定义为: 在这里θ表示两向量之间的角夹角(0° ≤ θ ≤ 180°),它位于这两个矢量 所定义的平面上. 向量积的模(长度)可以解释成以a和b为邻边的平行四边形的面积.求三角形ABC的面积,根据向量积的意义,得到: a=axi+ayj+azk; b=bxi+byj+bzk; a×b=(aybz-azby)i+(azbx-axbz)j

【转载】利用向量积(叉积)计算三角形的面积和多边形的面积

向量的数量积和向量积: (1)  向量的数量积   (1)  向量的向量积 两个向量a和b的叉积(向量积)可以被定义为: 在这里θ表示两向量之间的角夹角(0° ≤ θ ≤ 180°),它位于这两个矢量 所定义的平面上. 向量积的模(长度)可以解释成以a和b为邻边的平行四边形的面积.求三角形ABC的面积,根据向量积的意义,得到: a=axi+ayj+azk; b=bxi+byj+bzk; a×b=(aybz-azby)i+(azbx-axbz)j+(axby-aybx)k,为了帮助记忆,利用三阶行