Python:将一群二维无序点排列

一、基本介绍

1.1 功能

将一群无序二维平面点(大体上满足 m * n 矩阵分布,总计m*n个点),分别按x和y从小到大的顺序排序,以矩阵形式存储。

1.2 输入

一群二维平面点(x,y),本例中共15个点,组成3 * 5 的矩阵

[[564.0, 2564.0], [640.5, 1456.5], [3958.0, 1634.0], [2829.5, 1875.0], [2775.5, 2686.0], [3911.5, 2746.0], [2892.0, 472.0], [1809.5, 402.5], [1679.0, 2622.5], [4002.0, 544.0], [726.5, 338.5], [4986.5, 2804.5], [1738.0, 1514.5], [5025.5, 1705.5], [5068.0, 616.5]]

1.3 输出

x和y在一定误差允许范围内,排列后的矩阵每行的y基本相同,每列的x基本相同

排序后: [
[[726.5, 338.5], [1809.5, 402.5], [2892.0, 472.0], [4002.0, 544.0], [5068.0, 616.5]],
[[640.5, 1456.5], [1738.0, 1514.5], [2829.5, 1875.0], [3958.0, 1634.0], [5025.5, 1705.5]], 
[[564.0, 2564.0], [1679.0, 2622.5], [2775.5, 2686.0], [3911.5, 2746.0], [4986.5, 2804.5]]
]


二、代码实现


coordinate = [[564.0, 2564.0], [640.5, 1456.5], [3958.0, 1634.0], [2829.5, 1875.0], [2775.5, 2686.0], [3911.5, 2746.0], [2892.0, 472.0], [1809.5, 402.5], [1679.0, 2622.5], [4002.0, 544.0], [726.5, 338.5], [4986.5, 2804.5], [1738.0, 1514.5], [5025.5, 1705.5], [5068.0, 616.5]]

#仅仅支持矩阵点无缺失的情况
def sign1(coordinate,width):
    matrix = [] #矩阵
    rows = 1
    #初步处理,按y进行排序
    coordinate.sort(key = lambda x:x[1],reverse=False)
    #统计矩阵的行数与列数
    for i in range(len(coordinate)):
        #判断是否为最后一个元素
        if i != len(coordinate)-1:
            #统计矩阵的行数 width*0.05为 允许的y轴误差
            if abs(coordinate[i][1]-coordinate[i+1][1]) > width*0.05:
                rows = rows+1
    columns = int(len(coordinate)/rows)

    #转化矩阵形式
    for row in range(rows):
        matrix.append(coordinate[columns*row:columns*(row + 1)])
    #维度
    #print(np.array(matrix).shape)

    #根据x坐标,重新排列矩阵
    for row in range(rows):
        matrix[row].sort(key = lambda x:x[0],reverse=False)
    print("排序后:", matrix)
    return matrix

sign1(coordinate,3600)

说明:width*0.05为划分行的最小差距,若该值设置的不合理,则可能影响排序的结果,造成一些点的缺失。


版权声明:本文为qq_40719268原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。