如何分隔同一行的坐标?
Posted
技术标签:
【中文标题】如何分隔同一行的坐标?【英文标题】:How to separate co-ordinates that are on same line? 【发布时间】:2018-01-09 05:44:57 【问题描述】:我有一个坐标列表,绘制时看起来像这样:
它们并不完美。如何将它们分成多个列表,其中每个列表包含看起来像在同一水平线上的坐标。
这里的示例数据:
[(24, 228), (25, 194), (26, 162), (29, 83), (30, 52), (31, 17), (63, 223), (63, 194), (64, 162), (65, 84), (66, 49), (67, 19), (100, 228), (100, 190), (101, 158), (102, 81), (102, 54), (102, 20), (137, 227), (137, 195), (137, 163), (137, 86), (137, 52), (137, 22), (172, 23), (172, 57), (172, 87), (173, 163), (173, 195), (173, 227), (206, 24), (206, 58), (207, 84), (208, 159), (208, 191), (209, 223)]
【问题讨论】:
提供样本数据,我给你一个起点…… 轴对齐或任意?图像提示垂直线更好匹配...见Efficiently calculating a segmented regression on a large dataset和Given n points on a 2D plane, find the maximum number of points that lie on the same straight line 【参考方案1】:这应该可以解决问题:
data = np.array([(24, 228), (25, 194), (26, 162), (29, 83), (30, 52), (31, 17), (63, 223), (63, 194), (64, 162), (65, 84), (66, 49), (67, 19), (100, 228), (100, 190), (101, 158), (102, 81), (102, 54), (102, 20), (137, 227), (137, 195), (137, 163), (137, 86), (137, 52), (137, 22), (172, 23), (172, 57), (172, 87), (173, 163), (173, 195), (173, 227), (206, 24), (206, 58), (207, 84), (208, 159), (208, 191), (209, 223)])
thresh = 10
groups = []
for point in data:
x,y = point
for g in groups:
if abs(g[0][1] - y) < thresh:
g.append(point)
break
else:
groups.append([point])
您可以随意调整它...
【讨论】:
感谢您的帮助。【参考方案2】:由于您对水平线感兴趣,因此您只关心每个点的 y 坐标。我会将 y 坐标按升序排序,然后通过此列表将其切割成相邻点之间的间隙超过某个阈值的段。剩下的每一段都是同一水平线上的一组点。
【讨论】:
以上是关于如何分隔同一行的坐标?的主要内容,如果未能解决你的问题,请参考以下文章