根据浓度对点数组进行排序的算法

标签 algorithm sorting computational-geometry

我有一个坐标数组,我希望按点的集中区对它进行排序。我曾尝试使用 Graham 算法(如下所示),但没有得到想要的结果。我可以使用什么算法对点进行排序,如下图所示:

enter image description here

来源:

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

最佳答案

你需要某种 clusterization . 尝试 K_Means method一开始。

关于根据浓度对点数组进行排序的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17534201/

相关文章:

c - 给定一条编码消息,计算它可以被解码的方式的数量

python - 使用 Python 和 Eratosthenes 筛法计算 200 万以内的质数总和,如何更快更有效地做到这一点?

javascript - 如何根据javascript中嵌套数组的长度对对象数组进行排序

geometry - 划分单位球体

3d - 计算网格的顶点价 OpenMesh

sql - 如何通过 SQL 输出这个数字列表?

提出最短一天以达到目标的算法

java - 是否可以以排序的方式获取类字段?

c# - C#中的字符串排序

data-structures - 为什么只在平衡的二分查找树的叶节点中存储数据?