不规则多边形区域的面积计算算法
最近在写一个显微图像分析处理方面的程序,里面有一个功能是计算一个不规则的多边形区域的面积。因此花了点时间研究这个算法该如何写。研究了一番之后,算是找到了个比较靠谱的算法。这里就简单的写写自己的研究成果。
解决这个问题,需要点线性代数和矢量运算方面的知识。以下图为例,设三角形的三个顶点为
a,b,c
,坐标分别为
(xa,ya),(xb,yb),(xc,yc)
。
那么三角形的面积可以用行列式来表示:
需要特别注意的是这里 a,b,c 的排列,像图中这样 a,b,c 顺时针排列的,计算出的 S 是负数,需要再取个绝对值。如果
面积也可以用矢量的叉积来表示:
这里的
∥⋅∥
表示求矢量的模。当然也可以不求矢量的模,我们知道矢量叉积是另一个矢量,方向满足右手定则。因此
a,b,c
顺时针排列的,计算出的
S
是负方向的,
当
a
点的坐标为
当三角形的三个顶点都不在原点时,我们也可以借助原点来计算。
从上图中我们可以看出。
用行列式表示的话可以写为:
或者用矢量的叉积来写:
无论是用行列式来表示还是矢量叉积表示,式子都变得非常规矩,很容易用程序代码实现。
多边形区域的面积计算和这个计算的思想是一样的。每个线段与坐标原点都能围成一个三角形,这些三角形的“面积”之和就是多边形区域的面积。这里的面积打了引号,因为这些三角形的顶点排列顺序不同时,算出的面积可以是负值。
设多边形的各个顶点按逆时针排列分别是 v1,v2,⋯vn 。顶点坐标依次是 (x1,y1),(x2,y2),⋯(xn,yn) ,那么面积可以写为:
如果顶点的顺序是顺时针的,那么这么求出的面积就是负的,还要再取个负号。
至此,多边形面积计算问题就算解决了。