您能帮我正确排序点(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
似乎您只想按 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]]