坐标排序

问题描述 投票:0回答:1

您能帮我正确排序点(x 和 y 坐标)列表(数组)吗? 我使用了以下函数,但它并不总是给我我想要的。 示例是所附图片。

我希望点按以下顺序连接:1 -> 2 -> 3 -> 4 -> 5。

但是,它们按照接线顺序连接:1 -> 4 -> 2 -> 3 -> 5。

如何编辑代码才能做出我想要的东西?

谢谢您的帮助!

combined_coords = np.array([[100,200],[120,150],[58,85]])
new_points = sorting_function(combined_coords)
def sorting_function(xy_e):
    #step 1
    xl=xy_e[:,0]
    yl=xy_e[:,1]
    xc=sum(xl)/len(xl)
    yc=sum(yl)/len(yl)

    xa=np.array(xl)-xc
    ya=np.array(yl)-yc

    #step 3
    q=[{},{},{},{}]
    for i in range(len(xa)):
        if (xa[i]<0 and ya[i]<0):
            q[0][i]=(xa[i],ya[i])
        elif (xa[i]<0 and ya[i]>0):
            q[1][i]=(xa[i],ya[i])
        elif (xa[i]>0 and ya[i]>0):
            q[2][i]=(xa[i],ya[i])
        else:
            q[3][i]=(xa[i],ya[i])

    #step 4        
    alpha={}
    for i in range(len(q)):
        for j in q[i].keys():
            beta=np.degrees(np.arctan(abs(q[i][j][1])/abs(q[i][j][0])))
            if i==0:
                s=90-beta
            elif i==1:
                s=90+beta
            elif i==2:
                s=270-beta
            else:
                s=270+beta
            alpha[j]=s

    #step 5  

    xy = xy_e.tolist()

    re_xy=[]
    sorted_alpha=sorted(alpha.values())
    for i in sorted_alpha:
        for k,l in alpha.items():
            if i==l:
                check_p=xy[k] in re_xy
                if not check_p:
                    re_xy.append(xy[k])
    return re_xy
python sorting coordinates point
1个回答
0
投票

似乎您只想按 y 值对坐标进行排序,您可以以更简单的方式完成此操作。

coords = [[5,2],[2,7],[3,4]]   # Your array of coordinates

coords = sorted(coords, key=lambda x: x[1])

输出:

[[5, 2], [3, 4], [2, 7]]

© www.soinside.com 2019 - 2024. All rights reserved.