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为划分行的最小差距,若该值设置的不合理,则可能影响排序的结果,造成一些点的缺失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值