不规则多边形区域的面积计算算法

来源:互联网 发布:天刀妖娆御姐捏脸数据 编辑:程序博客网 时间:2024/04/29 01:21

不规则多边形区域的面积计算算法

最近在写一个显微图像分析处理方面的程序,里面有一个功能是计算一个不规则的多边形区域的面积。因此花了点时间研究这个算法该如何写。研究了一番之后,算是找到了个比较靠谱的算法。这里就简单的写写自己的研究成果。

解决这个问题,需要点线性代数和矢量运算方面的知识。以下图为例,设三角形的三个顶点为 a,b,c,坐标分别为 (xa,ya),(xb,yb),(xc,yc)
这里写图片描述

那么三角形的面积可以用行列式来表示:

S=12xaxbxcyaybyc111

需要特别注意的是这里 a,b,c 的排列,像图中这样 a,b,c 顺时针排列的,计算出的 S 是负数,需要再取个绝对值。如果 a,b,c 是逆时针排列的,计算出的结果直接就是正的。

面积也可以用矢量的叉积来表示:

S=12ab×ac

这里的 表示求矢量的模。当然也可以不求矢量的模,我们知道矢量叉积是另一个矢量,方向满足右手定则。因此 a,b,c 顺时针排列的,计算出的 S 是负方向的,a,b,c 是逆时针排列的,计算出的结果直接就是正的。

a 点的坐标为 (0,0) 时,上面的两个式子都可以简化为:

S=12xbxcybyc=12xbycxcyb

当三角形的三个顶点都不在原点时,我们也可以借助原点来计算。
这里写图片描述
从上图中我们可以看出。

Sabc=SoabSocbSoac

用行列式表示的话可以写为:

Sabc=12xaxbyayb12xcxbycyb12xaxcyayc=12xaxbyayb+12xbxcybyc+12xcxaycya

或者用矢量的叉积来写:

Sabc=12oa×ob12oc×ob12oa×oc=12oa×ob+ob×oc+oc×oa

无论是用行列式来表示还是矢量叉积表示,式子都变得非常规矩,很容易用程序代码实现。

多边形区域的面积计算和这个计算的思想是一样的。每个线段与坐标原点都能围成一个三角形,这些三角形的“面积”之和就是多边形区域的面积。这里的面积打了引号,因为这些三角形的顶点排列顺序不同时,算出的面积可以是负值。

设多边形的各个顶点按逆时针排列分别是 v1,v2,vn。顶点坐标依次是 (x1,y1),(x2,y2),(xn,yn),那么面积可以写为:

S=12(x1x2y1y2+x2x3y2y3++xn1xnyn1yn+xnx1yny1)

如果顶点的顺序是顺时针的,那么这么求出的面积就是负的,还要再取个负号。

至此,多边形面积计算问题就算解决了。

2 0
原创粉丝点击