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))
94、计算多边形面积
最新推荐文章于 2024-08-23 16:53:34 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)