因此,我們有一個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