参考
鞋带公式——多边形面积求和
GIS算法:利用鞋带定理(Shoelace formula)求2D多边形面积
一、简单解释
鞋带公式 (Shoelace formula),也叫高斯面积公式,是一种数学算法,可求确定区域的一个简单多边形的面积。该多边形是由它们顶点描述笛卡尔坐标中的平面。用户交叉相乘相应的坐标以找到包围该多边形的区域,并从周围的多边形中减去该区域以找到其中的多边形的区域。之所以称为鞋带公式,是因为对构成多边形的坐标进行恒定的交叉乘积,就像系鞋带一样。——以上来自维基百科en.wikipedia.org/wiki/Shoelace_formula。
为什么叫做鞋带公式,这是因为在计算的过程很像鞋带一样缠绕着,比如一个多边形(三角形),三个顶点分别是 A:(x1, y1) , B:(x2, y2) , C:(x3, y3) 鞋带公式是这样子算的:
S三角形=0.5∗((x1∗y2+x2∗y3+x3∗y1)−(y1∗x2+y2∗x3+y3∗x1))
我们代个数进去试试A:(0, 4) , B:(0, 0) , C:(3, 0) ,代进公式中:S 三 角 形 = 0.5 ∗ ( ( 0 ∗ 0 + 0 ∗ 0 + 3 ∗ 4 ) − ( 4 ∗ 0 + 0 ∗ 3 + 0 ∗ 0 ) ) = 6
二、更复杂的例子
首先参考一个例子,展示如何利用鞋带定理计算多边形面积。我们只需选择一个顶点,然后按照逆时针顺序读取坐标,最后回到起点。并按照类似系鞋带的顺序将坐标串联起来。
对于绿色的线链接的坐标直接相乘。红色的相乘;最后把两者相减。重复操作,最后将计算好的数累和得到4+2+30+24+22+28=110,则多边形的面积为110/2=55
三、以三角形为例进行证明
对于一个三角形,我们可以将其转换为求平行四边形面积的一半
取三角形的坐标,a、b和c、d构建两个矩形。两个绿色的直角三角形是大矩形的两个空白,补上了平行四边形和小矩形部分。易知大矩形的面积等于平行四边形加小矩形(小矩形与平行四边形有重叠部分),即ad = S平等四边形+bc,得到S平等四形=ad-bc,S三角形面积=0.5*(ad-bc)
注:这里可以将下图中,底部直角三角形移到顶部,左侧直角三角形移到右上角,可以看到大矩形的面积就是图中橙色和绿色区域之和,并且绿色重叠部分要算两遍。重新拆解组合,先算平等四边形,会发现绿色重叠部分还要算一次,而它正好和旁边的两个绿色小直角三形组合成绿色小矩形。
其实熟悉向量叉乘的话,会发现这个公式很容易,可以参考Cocos 向量应用
四、推广到任意多边形
上个例子的多边形就可以拆分成多个三角形,对各组坐标的叉乘最终计算得出了三角形的面积,累加起来就得到了多边形的面积。
如图多边形,原点p在多边形外面,使用鞋带定理计算面积。可以发现从V1开始逆时针遍历顶点。如果线段pv1是划向逆时针方向,三角形就是正数,划向顺时针方向为负数。正负抵消最终得到多边形面积