目的
学习和介绍一个有用的求任意简单多边形面积的经典公式。
所谓“简单多边形”,可以是凹、或凸多边形,但原则上边与边之间不能有交叉;或者,拓扑一点,从多边形卷绕数的角度,多边形内的点卷绕数只能是±1。
这个公式有悠久的历史,而且计算中十分有用,可惜维基里面只有英文版。
Shoelace公式
这里的shoelace,——“鞋带”——,并不是人名,所以翻译成“鞋带公式”没有任何问题。这个名字是怎么来的呢?因为实际计算中,公式以n×2 的矩阵形式表示多边形上顺序排列的顶点,行列式的计算又存在错位,形如所系的“鞋带”,所以才得名。又叫“鞋带算法”、“鞋带法”、“高斯面积公式”、测量员公式。
维基上的简单例子是这样的,比如已知 ΔABC 三个顶点的坐标 A:(x1,y1)、 B:(x2,y2)、 C:(x3,y3),对应的矩阵是这样的:
??????????????????????x1x2x3x1 y1y2y3y1?????????????????????????????????????????????x1x2x3x1???y1y2y3y1?????????????????????????????????????????????x1x2x3x1×××y1y2y3y1??????????????????????
计算面积时,先根据中间一个矩阵,计算
a=(x1×y2)+(x2×y3)+(x3×y1)
再从最右侧矩阵计算
b=(y1×x2)+(y2×x3)+(y3×x1)
则三角形面积为:
SΔABC=12|a?b|=12∣∣((x1×y2)+(x2×y3)+(x3×y1))?((y1×x2)+(y2×x3)+(y3×x1))∣∣
代入一个简单的情形试试,A:(0,4),B:(0,0),C:(3,0),则是一个直角顶点在原点,底 3 高 4 面积为 6 的直角三角形:
SΔABC=12∣∣((x1×y2)+(x2×y3)+(x3×y1))?((y1×x2)+(y2×x3)+(y3×x1))∣∣
=12|((0×0)+(0×0)+(3×4))?((4×0)+(0×3)+(0×0))|=6
当简单多边形边数或顶点数更多时,则计算面积时上述矩阵为 n×2 维,计算规则不变。
公式的一般形式:
A=12∣∣∣∑i=1nxi(yi+1?yi?1)∣∣∣=12∣∣∣∑i=1nyi(xi+1?xi?1)∣∣∣=12∣∣∣∣∑i=1ndet(xiyixi+1yi+1)∣∣∣∣
公式中约定: 当下标大于
n 时,
xn+1=x1,
yn+1=y1。
它可以看作格林公式用于面积计算时的特殊情形。
证明
证明因为不难,用Green定理来证时,只须假设合适的向量场,也比较方便。所以就不写了。
这个讲完之后,后面介绍它在近似数值计算求复杂闭曲线所包围面积中的一个应用。