计算循环矩阵的坐标

1、题目描述

一个大小为(2t+1)*(2t+1)的方阵,中心点的坐标为 center,依次求出每一个方阵中的坐标。如下图所示,是一个 t 等于 2 的方阵。

2、计算坐标

由题目可知,方阵一定是一个奇数乘以奇数的矩阵,中心点的坐标为 center,则每一层围绕中心的坐标可以通过计算得出,上图中我标记相同颜色的区域同一层。

每一层的元素的个数为 8t,这个结果可以通过下面的计算得出,那么我们就可以通过这个表达式来计算出每一层的坐标。

记中心点 center 为第 0 层,之后依次为第一层、第二层······。

在第一层中,第一行的元素个数为 2*1+1=3,然后第二列的元素个数为 2*1-1=1,第二行和第一列依次为 2*1+1=3  2*1-1=1。所以第一层共有 8 个元素,第二层共有 16 个元素,从上面的图片中也可以数出来,结果是正确的。很明显的可以算出,每一层共有 8t 个元素,这点可以通过数学归纳法得以验证。

之后开始计算每一层的坐标,我们从每一层的左上角开始计算,中心点center的坐标我们设为(m,n),第一层的左上角为 (m-1,n+1),之后每一层的第一个坐标为(m-i,n+i)(for i in [1,t])

3、python代码表示


def get_dxy_list(center_point, t):
    point_list = [(0, 0)]
    for i in range(1, t + 1):
        left_lower = (center_point[0] - i, center_point[1] - i)
        point_list.append(left_lower)
        for j in range(8 * i - 1):
            # print((1 - j // 2 * i, j // 2 * i), end="\t")
            # print((-(1 - (j // 6 * i)), -(j // 6 * i)))
            if j < 4 * i:
                point_list.append((point_list[-1][0] + 1 - j // (2 * i), point_list[-1][1] + j // (2 * i)))
            else:
                point_list.append((point_list[-1][0] - 1 + (j // (6 * i)), point_list[-1][1] - (j // (6 * i))))
    print(point_list)
    # print(len(point_list))
    return point_list

4、代码文件

见文章顶部。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值