找到矩形瓷砖螺旋的第n个位置? [英] Find the position nth element of a rectangular tiled spiral?
本文介绍了找到矩形瓷砖螺旋的第n个位置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
获得矩形平铺螺旋线的第n个元素的算法是什么?
What is an algorithm to get the nth element of a rectangular tiled spiral?
这里是 n
:
[ 20 ][ 21 ][ 22 ][ 23 ][ 24 ]
[ 19 ][ 6 ][ 7 ][ 8 ][ 9 ]
[ 18 ][ 5 ][ 0 ][ 1 ][ 10 ]
[ 17 ][ 4 ][ 3 ][ 2 ][ 11 ]
[ 16 ][ 15 ][ 14 ][ 13 ][ 12 ]
,这是相应的坐标对于 n
:
and here are the corresponding coordinates for n
:
[-2,2 ][-1,2 ][ 0,2 ][ 1,2 ][ 2,2 ]
[-2,1 ][-1,1 ][ 0,1 ][ 1,1 ][ 2,1 ]
[-2,0 ][-1,0 ][ 0,0 ][ 1,0 ][ 2,0 ]
[-2,-1][-1,-1][ 0,-1][ 1,-1][ 2,-1]
[-2,-2][-1,-2][ 0,-2][ 1,-2][ 2,-2]
如果给定 n
,如何计算
推荐答案
这是JavaScript中的代码。它计算2D矩阵在中间(0,0)中从1开始的位置
Here is an code in JavaScript. It calculates position for 2D matrix starting with number 1 in a middle (0, 0)
13 12 11 10 25
14 3 2 9 24
15 4 1 8 23
16 5 6 7 22
17 18 19 20 21
/**
* Finds coordinates (position) of the number
*
* @param {Number} n - number to find position/coordinates for
* @return {Number[]} - x and y coordinates of the number
*/
function position(n) {
const k = Math.ceil((Math.sqrt(n) - 1) / 2);
let t = 2 * k + 1;
let m = Math.pow(t, 2);
t -= 1;
if (n >= m - t) {
return [k - (m - n), -k];
}
m -= t;
if (n >= m - t) {
return [-k, -k + (m - n)];
}
m -= t;
if (n >= m - t) {
return [-k + (m - n), k];
}
return [k, k - (m - n - t)];
}
这篇关于找到矩形瓷砖螺旋的第n个位置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文