You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:57:00