如何分隔同一行的坐标?

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 坐标按升序排序,然后通过此列表将其切割成相邻点之间的间隙超过某个阈值的段。剩下的每一段都是同一水平线上的一组点。

【讨论】:

以上是关于如何分隔同一行的坐标?的主要内容,如果未能解决你的问题,请参考以下文章

python2.7在同一行的两个输入内退出(以空格分隔)

Kotlin Null 安全警告 Unexpected tokens(使用 ; 在同一行分隔表达式)

1038 统计同成绩学生

1038 统计同成绩学生(20 分)

PAT B1038 统计同成绩学生超时问题

1.13.17