如何分隔同一行的坐标?

时间:2018-01-09 05:44:57

标签: python algorithm geometry

我有一个坐标列表,我在绘制时看起来像这样: plotted co-ordinates

他们并不完美。如何将它们分成多个列表,其中每个列表包含在同一水平线上看起来像的坐标。

这里有样本数据:

[(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)] 

2 个答案:

答案 0 :(得分:1)

由于你对水平线感兴趣,所以你关心的每个点都是它的坐标。我将y坐标按升序排序,然后通过此列表将其切割成相邻点之间的间隙超过某个阈值的段。剩下的每个分段都是同一水平线上的一组点。

答案 1 :(得分: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])

由你根据自己的意愿调整它......