94、计算多边形面积

本文介绍了如何在Python中使用Shapely库计算多边形的面积,包括官方方法、鞋带公式以及针对凸多边形的三角形和法。通过实例展示了如何处理不同类型的多边形情况。
摘要由CSDN通过智能技术生成
from shapely.geometry import Polygon

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __repr__(self):
        return str([self.x, self.y])

#多边形标准化
def polygonTransform(P):
    return [Point(p[0], p[1]) for p in P]

#计算多边形的面积官方
def calculateAreaOffice(P):
    p = Polygon([(p.x, p.y) for p in P])
    return p.area

#计算多边形的面积,鞋带公式,可用于计算简单多边形
def calculateArea(P):
    p0, plast = P[0], P[-1]
    #把起点补充为终点
    if p0.x != plast.x or p0.y != plast.y:
        P.append(p0)
    area = 0
    for i in range(len(P)-1):
        xi, yi, xj, yj = P[i].x, P[i].y, P[i+1].x, P[i+1].y
        area += 0.5*(yi+yj)*(xi-xj)
    return abs(area)

#计算三角形面积
def calculateAreaTriangle(a, b, c):
    ab = [b.x-a.x, b.y-a.y]
    ac = [c.x-a.x, c.y-a.y]
    return 0.5*abs(ab[0]*ac[1]-ab[1]*ac[0])

#计算多边形面积,拆成三角形的和,只适用于凸多边形
def calculateAreaConvex(P):
    return sum([calculateAreaTriangle(P[0], P[i], P[i+1]) for i in range(1, len(P)-2)])

#多边形面积计算case
def case():
    LP = []
    LP.append([[0, 0], [1, 0], [1, 1], [0, 1]])
    LP.append([[0, 0], [1, 0], [1, 1]])
    LP.append([[0, 0], [2, 0], [1, 1], [0, 0]])
    LP.append([[3, 4], [5, 11], [12, 8], [9, 5], [5, 6]]) #凹多边形
    LP = [polygonTransform(P) for P in LP]
    return LP

if __name__ == '__main__':
    P = case()[3]
    #0-计算多边形的面积官方
    print(calculateAreaOffice(P))
    #1-计算多边形的面积,鞋带公式,可用于计算简单多边形,推荐使用
    print(calculateArea(P))
    #2-计算多边形面积,拆成三角形的和,仅适用于凸多边形
    print(calculateAreaConvex(P))

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值