螺旋队列公式解释

在这里插入图片描述
以1为坐标零点,向右为X正,向下为Y正,任意输入一坐标(x,y),r=max(|x|,|y|) 为当前所在层数,得到下面公式

上边:top=max−r+x;

左边:left=max−3∗r−y;

下边:bottom=max−5∗r−x;

右边:right=max−7∗r+y;

(设:紫色数字为基准点1,上/下/左/右正对数值为基准点2,如红框数值)

一、第R层数值是从多少开始的?
首先可以知道第R-1层数值是 [2x(R-1)+1]^2 = (2xR-1)^2 加一就是下一层的第一个数值。eg:第四层是从 (2x4-1)^2+1=50 开始

二、第R层有多少个数?
第R层最大数为(2xR+1)^2,最小数为(2xR-1)^2+1,两式相减在加一即得到当前层数数值个数:8R,除第一层外,每一层都是8的倍数。eg:第五层有5x8=40个

三、如何通过坐标找数值?
1、首先确定层数,找到基准点1 ,图中紫色部分,此数值为当前层数最大数值。eg:第三层的49
2、第二部找到基准点2,当前层数的上、下、左、右 正对数值(真正只需一个),通过基准点2 与 x/y 进行 加/减 ,就得到坐标点(x,y)的数值。eg:如坐标(x,y)为(-2,-3),先找到基准点2:49-1x3=46,在46基础上在加上x坐标-2得 46+(-2)=44

基准点2的获得就是通过当前层数最大值减去适当层数(层数可以类似看作半径),
每一层所有数值可以看作一个正方形,每条边的长度=层数X2+1,
从基准点1逆时针走过 1个层数为正上基准点2,走过3个层数为正左基准点2,走过5个层数为正下基准点2,走过7个层数为正右基准点2

参考资料:螺旋矩阵与螺旋队列

猜你喜欢

转载自blog.csdn.net/weixin_43689161/article/details/123930247