我有坐标数组,我希望按点的集中区域对其进行排序。我尝试过使用 Graham 算法(如下所示),但没有得到想要的结果。我可以使用什么算法来对点进行排序,如下图所示:
资源:
def rotate(A,B,C):
return (B[0]-A[0])*(C[1]-B[1])-(B[1]-A[1])*(C[0]-B[0])
def grahamscan(A):
n = len(A)
P = range(n)
for i in range(1,n):
if A[P[i]][0]<A[P[0]][0]:
P[i], P[0] = P[0], P[i]
for i in range(2,n):
j = i
while j>1 and (rotate(A[P[0]],A[P[j-1]],A[P[j]])<0):
P[j], P[j-1] = P[j-1], P[j]
j -= 1
S = [P[0],P[1]]
for i in range(2,n):
while rotate(A[S[-2]],A[S[-1]],A[P[i]])<0:
del S[-1] # pop(S)
S.append(P[i]) # push(S,P[i])
return S