以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
参考资料:螺旋矩阵与螺旋队列