因此,我们有一个5x5的二维数组,像这样:计算“边框”的多维数组
gridmodel:
[
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]
]
这代表了块状物体的样子,它是如何绘制网格上,所以我们可以有像这样的例子:
gridmodel:
[
[0, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 1, 1, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 0]
]
这将代表俄罗斯方块,从简单的T-块。如果外形不从左上角开始,形状刚刚移位运行,使其正常工作。
反正就是那种无关紧要的。我需要的是一种在这个5x5网格中计算任何形状的边界框的方法。形状可以具有孔或形状可在阵列中包括只是一个单一的1,基本上5×5可以是1和0的任意组合。
要计算边框我想我只需要找到其中1是最顶级和最左边和1是最右侧和最底部。
我做了这个,这是应该找到左上1:
var bb =
{
x1: null,
y1: null,
x2: null,
y2: null
}
var toppest = null;
var leftest = null;
for(var y = 0; y < gridmodel.length; y++)
{
for(var x = 0; x < gridmodel[y].length; x++)
{
if(gridmodel[y][x] === 1)
{
if(toppest === null)
{
toppest = { x: x, y: y };
}
if(leftest === null)
{
leftest = { x: x, y: y };
}
else
{
if(x < leftest.x)
{
leftest = { x: x, y: y };
}
}
}
}
}
但是,这看起来已经大大超过复杂,它几乎没有解决问题的一半。
@Teemu啊,我忘了indexOf和lastIndexOf。感谢您的提醒! – Piwwoli