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

如何从列表中提取x1、y1、x2、y2以计算四边形周长

修正方案与代码实现

原有代码问题

  • 正则r'\d'仅匹配单个数字,遇到多位数坐标会提取错误,改为r'\d+'匹配连续数字
  • 提取的结果为字符串类型,需转换为整数才能参与数值计算
  • 提取得到的8个元素需按四边形顶点的顺时针/逆时针顺序排列,避免计算交叉边长度

完整实现代码

import re
import math

def perimetr(data):
    # 提取所有数字并转为整数,列表顺序为 [LBx, LBy, RBx, RBy, LTx, LTy, RTx, RTy]
    a = list(map(int, re.findall(r'\d+', data)))
    # 按顺时针排列顶点:左下→右下→右上→左上→回到起点闭合
    points = [
        (a[0], a[1]), # LB点坐标
        (a[2], a[3]), # RB点坐标
        (a[6], a[7]), # RT点坐标
        (a[4], a[5]), # LT点坐标
        (a[0], a[1])
    ]
    perimeter = 0
    # 遍历计算4条边的长度累加得到周长
    for i in range(4):
        x1, y1 = points[i]
        x2, y2 = points[i+1]
        dist = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
        perimeter += dist
    return perimeter

取值逻辑说明

提取后的列表a索引与坐标对应关系:

  • a[0]/a[1]:LB点的x/y坐标
  • a[2]/a[3]:RB点的x/y坐标
  • a[4]/a[5]:LT点的x/y坐标
  • a[6]/a[7]:RT点的x/y坐标
    按顺时针顺序取相邻两个点的坐标代入距离公式,累加4条边长度即可得到最终周长。

坐标示意图

坐标示意图

内容的提问来源于stack exchange,提问作者Ilya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 22:39:03