- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个基于 N x M 正方形棋盘的 2D 游戏(实际上是 N x N,因为它是正方形)。棋盘上的每个方 block 都分配了一个 ID,从 ID 0
开始,从左到右、从上到下计数。
例如,对于 10 x 10 的棋盘
| 0 1 2 3 4 5 6 7 8 9 |
| 10 11 12 13 14 15 16 17 18 19 |
| 20 21 22 23 24 25 26 27 28 29 |
| etc |
| etc |
| etc |
| etc |
| etc |
我想要一个函数,它采用网格的大小 (N
) 和一个象限([0, 1, 2, 3]
对应的一个)到左上角、右上角、左下角、右下角),它返回每个象限中元素的 ID。例如,getQuadrant(10, 0)
将返回左上象限中的 ID:
[0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24... 44]
我已经尝试了几个序列求解器来找到一个方程,但它们无法找到匹配项。我想出的唯一可行的解决方案是象限相关的,这意味着我基本上有 4 个功能。
最佳答案
总结:
以下表达式的计算结果为象限 quad
中的 n
xn
正方形的 id 数组:
Array.from({length: n * n / 4}).map((_,i) =>
2 * i - i % (n / 2) + (quad % 2) * n / 2 + (quad > 1) * n * n / 2
)
详细信息:
下面的函数包含一个公式,允许您为任意大小的矩形网格输入 N 和 M(N 和 M 必须为偶数),以及象限编号(0 到 3)。使用的第一个示例是 6 x 4 网格。
0 1 2 3 4 5
6 7 8 9 10 11
12 13 14 15 16 17
18 19 20 21 22 23
const getRectQuadrant = (n, m, quad) =>
Array.from({length: n/2 * m/2}).map((_,i) =>
2 * i - i % (n / 2) + (quad % 2) * n / 2 + (quad > 1) * n * m / 2
);
console.log(JSON.stringify(getRectQuadrant(6, 4, 0)));
console.log(JSON.stringify(getRectQuadrant(6, 4, 1)));
console.log(JSON.stringify(getRectQuadrant(6, 4, 2)));
console.log(JSON.stringify(getRectQuadrant(6, 4, 3)));
要将其概括为正方形网格(即 M = N),只需创建另一个调用该函数的函数,即 const getSquareQuadrant = (n, quad) => getRectQuadrant(n, n, quad);
或仅将上述代码中的每个 m
替换为 n
,如以下 4 x 4 方形网格代码所示:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
const getSquareQuadrant = (n, quad) =>
Array.from({length: n * n / 4}).map((_,i) =>
2 * i - i % (n / 2) + (quad % 2) * n / 2 + (quad > 1) * n * n / 2
);
console.log(JSON.stringify(getSquareQuadrant(4, 0)));
console.log(JSON.stringify(getSquareQuadrant(4, 1)));
console.log(JSON.stringify(getSquareQuadrant(4, 2)));
console.log(JSON.stringify(getSquareQuadrant(4, 3)));
矩形 N x M 网格的解释:
Array.from({length: n/2 * m/2}).map((_,i) => ...
这将创建一个整数序列(即从零开始),其长度为一个象限的长度,即原始网格四分之一的长度。这些序号作为 i
向前传递。
2 * i - i % (n / 2) + (quad % 2) * n / 2 + (quad > 1) * n * m / 2
------------------- ------------------ ----------------------
creates the values adds a constant if adds a constant if you
in the top left you want the right want the bottom half
quadrant half
矩形网格的更详细/可读版本:
const getRectQuadrant = (m, n, quad) => {
const quadrantPlaceholders = Array.from({length: n/2 * m/2});
const offsetForRightHalf = (quad % 2) * n / 2;
const offsetForBottomHalf = (quad > 1) * n * m / 2;
const idsForQuadrant = quadrantPlaceholders.map((_,i) => {
const idForTopLeft = 2 * i - i % (n / 2);
return idForTopLeft + offsetForRightHalf + offsetForBottomHalf;
});
return idsForQuadrant;
};
console.log(JSON.stringify(getRectQuadrant(4, 6, 0)));
console.log(JSON.stringify(getRectQuadrant(4, 6, 1)));
console.log(JSON.stringify(getRectQuadrant(4, 6, 2)));
console.log(JSON.stringify(getRectQuadrant(4, 6, 3)));
关于javascript - 返回 N x M 网格象限中点 ID 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42231564/
我需要你的帮助!我在它们之间放置了随机数量的 div。 Item description Item description Item description Item
我有两个 NSDates,时间格式为“h:mm a”(即 6:00 AM 和 8:00 PM)。 我试图找出这两个时间之间的中点是什么时间。 对于上面的示例,早上 6:00 和晚上 8:00 之间的中
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我正在寻找一种有效的算法来检查一个点是否在 3D 中的另一个点附近。 sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2) < radius 这似乎并不太快,实际上我不需要这
我可以让 pandas cut/qcut 函数返回 bin 端点或 bin 中点而不是一串 bin 标签吗? 目前 pd.cut(pd.Series(np.arange(11)), bins = 5)
我是一名优秀的程序员,十分优秀!