如何从列表中提取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
相关产品推荐
相关产品推荐

