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

算法导论第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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值