目的
学习和介绍一个有用的求任意简单多边形面积的经典公式。
所谓“简单多边形”,可以是凹、或凸多边形,但原则上边与边之间不能有交叉;或者,拓扑一点,从多边形卷绕数的角度,多边形内的点卷绕数只能是 ±1 <script id="MathJax-Element-1" type="math/tex">\pm 1</script>。
这个公式有悠久的历史,而且计算中十分有用,可惜维基里面只有英文版。
Shoelace公式
这里的shoelace,——“鞋带”——,并不是人名,所以翻译成“鞋带公式”没有任何问题。这个名字是怎么来的呢?因为实际计算中,公式以 n×2 <script id="MathJax-Element-2" type="math/tex">n\times 2</script> 的矩阵形式表示多边形上顺序排列的顶点,行列式的计算又存在错位,形如所系的“鞋带”,所以才得名。又叫“鞋带算法”、“鞋带法”、“高斯面积公式”、测量员公式。
维基上的简单例子是这样的,比如已知 ΔABC <script id="MathJax-Element-3" type="math/tex">\Delta ABC</script> 三个顶点的坐标 A:(x1,y1) <script id="MathJax-Element-4" type="math/tex">A: (x_1,y_1)</script>、 B:(x2,y2) <script id="MathJax-Element-5" type="math/tex">B: (x_2,y_2)</script>、 C:(x3,y3) <script id="MathJax-Element-6" type="math/tex">C: (x_3,y_3)</script>,对应的矩阵是这样的:
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢x1x2x3x1 y1y2y3y1⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⇒⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢x1x2x3x1⋱⋱⋱y1y2y3y1⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⇒⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢x1x2x3x1×××y1y2y3y1⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
<script id="MathJax-Element-7" type="math/tex; mode=display">\left[ \begin{array}{ccc} \\[-5pt] x_1 & &y_1 \\ & \quad &\\[8pt] x_2 & &y_2 \\ & \quad&\\[8pt] x_3 & &y_3 \\ & \quad&\\[8pt] x_1 & &y_1 \\\ \end{array} \right]\quad{\Huge\Rightarrow}\quad\left[ \begin{array}{ccc} \\ x_1 & &y_1 \\ &\ddots& \\ x_2 & &y_2 \\ &\ddots&\\ x_3 & &y_3 \\ &\ddots& \\ x_1 & &y_1 \\ \\ \end{array} \right]{\Huge\Rightarrow}\quad\left[ \begin{array}{ccc} \\ x_1 & &y_1 \\ &{\huge\times}& \\[5pt] x_2 & &y_2 \\ &{\huge\times}&\\[5pt] x_3 & &y_3 \\ &{\huge\times}& \\[5pt] x_1 & &y_1 \\ \\ \end{array} \right]</script>
计算面积时,先根据中间一个矩阵,计算
a=(x1×y2)+(x2×y3)+(x3×y1)
<script id="MathJax-Element-8" type="math/tex; mode=display">a=(x_1 \times y_2)+(x_2\times y_3)+(x_3\times y_1)</script>
再从最右侧矩阵计算
b=(y1×x2)+(y2×x3)+(y3×x1)
<script id="MathJax-Element-9" type="math/tex; mode=display">b=(y_1 \times x_2)+(y_2\times x_3)+(y_3\times x_1)</script>
则三角形面积为:
SΔABC=12|a−b|=12∣∣((x1×y2)+(x2×y3)+(x3×y1))−((y1×x2)+(y2×x3)+(y3×x1))∣∣
<script id="MathJax-Element-10" type="math/tex; mode=display">S_{\Delta ABC}=\dfrac{1}{2}\left|a-b\right|=\dfrac{1}{2}\left|\left((x_1 \times y_2)+(x_2\times y_3)+(x_3\times y_1)\right)-\left((y_1 \times x_2)+(y_2\times x_3)+(y_3\times x_1)\right)\right|</script>
代入一个简单的情形试试, A:(0,4),B:(0,0),C:(3,0) <script id="MathJax-Element-11" type="math/tex">A:(0,4),\;B:(0,0),\;C:(3,0)</script>,则是一个直角顶点在原点,底 3 <script id="MathJax-Element-12" type="math/tex">3</script> 高 4<script id="MathJax-Element-13" type="math/tex">4</script> 面积为 6 <script id="MathJax-Element-14" type="math/tex">6</script> 的直角三角形:
SΔABC=12∣∣((x1×y2)+(x2×y3)+(x3×y1))−((y1×x2)+(y2×x3)+(y3×x1))∣∣
<script id="MathJax-Element-15" type="math/tex; mode=display">S_{\Delta ABC}=\dfrac{1}{2}\left|\left((x_1 \times y_2)+(x_2\times y_3)+(x_3\times y_1)\right)-\left((y_1 \times x_2)+(y_2\times x_3)+(y_3\times x_1)\right)\right|</script>
=12|((0×0)+(0×0)+(3×4))−((4×0)+(0×3)+(0×0))|=6
<script id="MathJax-Element-16" type="math/tex; mode=display">=\dfrac{1}{2}\left|\left((0 \times 0)+(0\times 0)+(3\times 4)\right)-\left((4 \times 0)+(0\times 3)+(0\times 0)\right)\right|=6</script>
当简单多边形边数或顶点数更多时,则计算面积时上述矩阵为 n×2 <script id="MathJax-Element-17" type="math/tex">n\times 2</script> 维,计算规则不变。
公式的一般形式:
A=12∣∣∣∑i=1nxi(yi+1−yi−1)∣∣∣=12∣∣∣∑i=1nyi(xi+1−xi−1)∣∣∣=12∣∣∣∣∑i=1ndet(xiyixi+1yi+1)∣∣∣∣
<script id="MathJax-Element-18" type="math/tex; mode=display">A=\dfrac{1}{2}\left|\sum\limits_{i=1}^n x_i\left(y_{i+1}-y_{i-1}\right)\right| =\dfrac{1}{2}\left|\sum\limits_{i=1}^n y_i\left(x_{i+1}-x_{i-1}\right)\right|=\dfrac{1}{2}\left|\sum\limits_{i=1}^n\det\left( \begin{array}{cc} x_i & x_{i+1} \\ y_i & y_{i+1} \\ \end{array} \right)\right|</script>
公式中约定: 当下标大于
n <script id="MathJax-Element-19" type="math/tex">n</script> 时,
xn+1=x1<script id="MathJax-Element-20" type="math/tex">x_{n+1}=x_1</script>,
yn+1=y1 <script id="MathJax-Element-21" type="math/tex">y_{n+1}=y_1</script>。
它可以看作格林公式用于面积计算时的特殊情形。
证明
证明因为不难,用Green定理来证时,只须假设合适的向量场,也比较方便。所以就不写了。
这个讲完之后,后面介绍它在近似数值计算求复杂闭曲线所包围面积中的一个应用。
所有评论(0)