采访概率 - 寻找坐标2d数组

时间:2016-04-01 02:48:26

标签: javascript arrays 2d

  var image = [
  [1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 0, 0, 0, 1],
  [1, 1, 1, 0, 0, 0, 1],
  [1, 1, 1, 1, 1, 1, 1]
];

有一个图像,其中每个像素都是白色/黑色。图像是一个简单的2D数组(0 =黑色,1 =白色)。您知道的图像在白色背景上有一个黑色矩形。你的目标是找到这个矩形并返回它的坐标。

如何遍历二维数组?

3 个答案:

答案 0 :(得分:2)

我不确定您是否只需要知道左上角坐标,或者矩形的宽度和高度。我将在答案中加入两者。

要查找左上角,我将使用以下函数:

function findTopLeftCorner(image) {
    var imageHeight = image[0].length; // Assuming all columns have the same height
    // All columns should have the same height because it is an image
    var imageWidth = image.length;
    for (var x = 0; x < imageWidth; x++) {
        for (var y = 0; y < imageHeight; y++) {
            if (image[x][y] == 0) {
                return {x: x, y: y};
            }
        }
    }
}

要找到宽度和高度,我将使用以下功能:

function getWidthOfRectangle(image, topLeftCorner) {
    var x = topLeftCorner.x;
    while (image[x][topLeftCorner.y] == 0) {
        x++;
    }
    //Now x is the x-coordinate of the first white (1) pixel found
    //Therefore subtract 1 from it to find the last black (0) pixel found
    x--;
    return x - topLeftCorner.x;
}

function getHeightOfRectangle(image, topLeftCorner) {
    var y = topLeftCorner.y;
    while (image[topLeftCorner.x][y] == 0) {
        y++;
    }
    //Now y is the y-coordinate of the first white (1) pixel found
    //Therefore subtract 1 from it to find the last black (0) pixel found
    y--;
    return y - topLeftCorner.y;
}

全部放在一起:

var topLeftCorner = findTopLeftCorner(image);
var rectangle = {
                 x: topLeftCorner.x,
                 y: topLeftCorner.y,
                 width: getWidthOfRectangle(image, topLeftCorner),
                 height: getHeightOfRectangle(image, topLeftCorner)
};

希望这有帮助。这是我的第一个答案,所以如果我犯了错误,请随时在评论中告诉我。

答案 1 :(得分:1)

我提供了一个解决方案。 基本上你需要找出这个二维数组的长度。 Get size of dimensions in array

然后从第一个元素遍历它,直到找到第一个零元素,它将是矩形的左上角。

app.use(upload.single('file'))

同样从最后一个元素遍历它,找到第一个零元素,它将是矩形的右下角坐标。

https://jsfiddle.net/wdwgmczr/2/

只是通过这个小提琴。做一些更改看看输出。希望它会有所帮助。

答案 2 :(得分:-4)

var image = [
  [1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 0, 0, 0, 1],
  [1, 1, 1, 0, 0, 0, 1],
  [1, 1, 1, 1, 1, 1, 1]
];

for (var i = 0; i < image.length; i++) {
    // row is a 1D array
    var row = image[i];
}

第一个索引将返回第一行,依此类推。

随后,您可以像普通(1D)数组一样访问行中的每个像素。