格林公式计算多边形的面积

算法导论第31章第一节第8题。只要是边不相交的简单多边形,也就是说,不仅凸多边形,还有各种奇形怪状的凹多边形,都可以用格林公式求出面积。
格林公式:若函数P(x,y), Q(x,y)在由一条或几条光滑曲线所围成的闭区域D上连续,且有连续的一阶偏导数,则有
\iint_d(\frac{\partial Q}{\partial x} - \frac{\partial P}{\partial y})d\sigma = \oint_LPdx + Qdy
L为区域D的边界曲线,并取正方向。
边不相交的简单多边形正好是由数条线段围成的闭区域,所以可以使用格林公式。
令P=0, Q=x,则面积S = \iint_Dd\sigma = \oint_Lxdy
设第i个点P_i的坐标为(x_i, y_i),第i + 1个点P_{i + 1}的坐标为(x_{i + 1}, y_{i + 1}),则线段\overline{P_iP_{i + 1}}的参数式为\begin{cases}x = x_i + (x_{i + 1} - x_i)t \\y = y_i + (y_{i + 1} - y_i)t\end{cases},
所以\int_{\overline{P_iP_{i + 1}}}xdy = \int_0^1(x_i + (x_{i + 1} - x_i)t)(y_{i + 1} - y_i)dt=\frac{1}{2}(x_i + x_{i + 1})(y_{i + 1} - y_i),
所以面积S=\frac{1}{2}|\sum_{i=1}^{n}(x_i + x_{i + 1})(y_{i + 1} - y_i)|
上述公式可以计算任意简单多边形的面积,包括三角形,四边形,六边形。

python实现:
# P is list of vertices of the polygon
def polygon_area(P):
    n = len(P)
    P.append(P[0])
    S = 0
    for i in range(0, n):
        S = S + (P[i][0] + P[i + 1][0]) * (P[i + 1][1] - P[i][1])
    return 0.5 * abs(S)


作者:王二
链接:https://www.zhihu.com/question/53259589/answer/134574326
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/qq_27151549/article/details/80082291
今日推荐