【发布时间】:2016-02-01 15:28:40
【问题描述】:
所以我们有一个像这样的 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,基本上 5x5 可以是 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。也谢谢你的提醒!
标签: javascript arrays algorithm multidimensional-array bounding-box