如何计算给定坐标的多边形每一条边的长度?
多边形边长计算实现方案
你提到的math.dist配合for循环的方案完全可以实现需求,具体实现逻辑和代码如下:
实现逻辑
- 先对原始坐标做解包处理:你给出的坐标是三层嵌套结构,需要先提取出所有(x,y)格式的二维点
- 遍历点序列,依次计算当前点与下一个点的欧氏距离:因为是闭合多边形,最后一个点的下一个点取第一个点即可
- 直接调用Python标准库
math.dist计算两点距离,不需要自己实现欧氏距离公式
示例代码
import math # 原始坐标(已补数值分隔逗号,若你原始数据为空格分隔的字符串,需先做分割转整数处理) raw_coords = [[[623, 284]], [[526, 256]], [[532, 189]], [[504, 166]], [[323, 175]], [[276, 219]], [[119, 221]], [[1, 272]], [[0, 473]], [[615, 479]]] # 解包得到二维点列表 points = [item[0] for item in raw_coords] point_count = len(points) side_lengths = [] for i in range(point_count): current_p = points[i] next_p = points[(i+1) % point_count] # 距离保留2位小数,可按需调整精度 side_length = round(math.dist(current_p, next_p), 2) side_lengths.append(side_length) # 输出所有边长度 print(side_lengths)
其他可行方案
如果你后续需要处理更多多边形相关的几何计算(比如面积、拓扑判断、交点计算等),可以用第三方几何库shapely实现更简洁的调用:
from shapely.geometry import Polygon raw_coords = [[[623, 284]], [[526, 256]], [[532, 189]], [[504, 166]], [[323, 175]], [[276, 219]], [[119, 221]], [[1, 272]], [[0, 473]], [[615, 479]]] points = [item[0] for item in raw_coords] polygon = Polygon(points) # 直接获取所有边的长度 side_lengths = [segment.length for segment in polygon.exterior.segments]
注意事项
如果不需要计算多边形闭合边(即最后一个点到第一个点的边),将上述循环中(i+1) % point_count改为i+1,同时循环范围改为range(point_count - 1)即可。
内容的提问来源于stack exchange,提问作者user16731999
相关产品推荐
相关产品推荐

