如何用Python实现最多4个点构成的多边形面积计算
多边形面积计算解决方案
现有代码存在的问题
- 类设计错误:
Polygon不需要继承Point,它是多个点的集合容器,不是单个点的子类,原初始化逻辑也会触发属性不存在的报错 - 函数设计不合理:
get_Area冗余的self参数,固定传4个点的设计不够灵活,和输入顶点数的逻辑不匹配 - 缺少四边形面积计算逻辑:可以使用通用的鞋带公式覆盖2/3/4点的计算需求,不需要分开写分支逻辑
实现思路
默认输入的多边形顶点是按顺时针或逆时针顺序排列的简单多边形(无交叉边,凸/凹多边形都支持),使用鞋带公式统一计算面积:
- 2点时返回两点距离(兼容原有逻辑)
- 3点(三角形)自动计算面积
- 4点(四边形)自动计算面积
- 限制顶点数最多为4个
完整可运行代码
import math class Point: def __init__(self, x, y): self.x = x self.y = y # 两点距离计算(原有逻辑保留) def get_distance(point1: Point, point2: Point): return math.sqrt(((point1.x - point2.x) ** 2) + ((point1.y - point2.y) ** 2)) class Polygon: def __init__(self, points: list[Point]): # 限制顶点数最多4个 if len(points) > 4: raise ValueError("顶点数最多为4个") self.points = points self.point_count = len(points) def get_area(self): # 2点返回距离 if self.point_count == 2: return get_distance(self.points[0], self.points[1]) # 3点及以上用鞋带公式计算面积 sum1 = 0 sum2 = 0 n = self.point_count for i in range(n): x_i, y_i = self.points[i].x, self.points[i].y x_j, y_j = self.points[(i+1)%n].x, self.points[(i+1)%n].y sum1 += x_i * y_j sum2 += y_i * x_j return abs(sum1 - sum2) * 0.5 if __name__ == "__main__": print("请输入顶点数量(最多4个):") n = int(input()) if n < 2 or n >4: print("顶点数只能为2/3/4") exit() points = [] for i in range(n): print(f"请输入第{i+1}个点的x和y,空格分隔:") x, y = map(int, input().split()) points.append(Point(x, y)) polygon = Polygon(points) if n ==2: print(f"两点距离为:{polygon.get_area()}") else: print(f"多边形面积为:{polygon.get_area()}")
代码说明
- 重构了
Polygon类,仅接收顶点列表作为初始化参数,自动校验顶点数上限 - 统一用鞋带公式实现面积计算,兼容三角形、四边形场景
- 输入逻辑优化,不需要提前输入4个点,根据输入的顶点数动态获取对应坐标,避免冗余输入
内容的提问来源于stack exchange,提问作者mubb
相关产品推荐
相关产品推荐

