Javascript 在另一个二维阵列中查找一个二维阵列的所有引用
在JavaScript中,我试图找到这个2D整数数组的所有匹配坐标: 在该二维整数数组中,计算重叠子数组: 每个图像表示一个2D JavaScript整数数组,黑色像素对应于Javascript 在另一个二维阵列中查找一个二维阵列的所有引用,javascript,image-processing,Javascript,Image Processing,在JavaScript中,我试图找到这个2D整数数组的所有匹配坐标: 在该二维整数数组中,计算重叠子数组: 每个图像表示一个2D JavaScript整数数组,黑色像素对应于1,黄色像素对应于0,但我以这种方式描述数组,以便它们更易于可视化 那么如何在数组中找到数组的所有匹配项呢 以下是我试图实现的功能: findAllMatchesOfOne2DArrayInsideAnother2DArray(containedArray, containingArray){ //find al
1
,黄色像素对应于0
,但我以这种方式描述数组,以便它们更易于可视化
那么如何在数组中找到数组的所有匹配项呢
以下是我试图实现的功能:
findAllMatchesOfOne2DArrayInsideAnother2DArray(containedArray, containingArray){
//find all matching coordinates of containedArray inside containingArray, and return a 2D array of coordinates
}
获取任意给定二维数组在另一个二维数组中的所有发生次数。假设所有子阵列具有相同的维度(与[[1,0,0],[1,0]]]
不同)
var x=[[0,1,0,0,0,0,0],
[1,1,1,0,0,1,0],
[0,1,0,0,1,1,1],
[0,0,0,0,0,1,0],
[0,0,1,0,0,0,0],
[0,1,1,1,0,0,0],
[0,0,1,0,0,0,0]];
变量y=[[0,1,0],[1,1,1],[0,1,0];
var-res=[];
对于(变量i=0;i
数组
res
将包含每个匹配的左上角的“坐标”。我相信你会发现性能更好的算法,但这一个似乎有效:)这不是“在数组中查找数组”的问题,这是一个图像处理问题。我建议您编辑/重新标记您的问题以表明这一点。如果有一个更简单的解决方案,也可以说你需要它的目的是什么。@Patashu我试图在另一个图像中找到一个图像的所有匹配项,但每个图像中的每个像素都由一个整数表示。所以我试图在另一个2D图像数组中找到一个整数2D整数数组的所有匹配项。2D数组中没有子数组,子数组也不能像您所示那样重叠。您根本不是在寻找子阵列,而是在寻找5个点,而不是一行中的中间3个点,它们是相互远离的几个元素:宽度+/-1和高度+/-1…@dandavis为什么将二维阵列中的矩形区域称为“子阵列”是不正确的?在尝试回答之前,这是tilemap的表示吗?我能说一个单一的十字架类似于[0,1,0,1,1,1,0,1,0]吗?如果是瓷砖贴图,你怎么能有重叠的瓷砖?@Anderson Green:谢谢你添加了小提琴!
var x = [[0,1,0,0,0,0,0],
[1,1,1,0,0,1,0],
[0,1,0,0,1,1,1],
[0,0,0,0,0,1,0],
[0,0,1,0,0,0,0],
[0,1,1,1,0,0,0],
[0,0,1,0,0,0,0]];
var y = [[0,1,0],[1,1,1],[0,1,0]];
var res = [];
for (var i = 0; i < x.length - y.length + 1; i++) {
for (var k = 0; k < x[0].length - y[0].length + 1; k++) {
var count = 0;
for (var l = 0; l < y.length; l++) {
for (var m = 0; m < y[l].length; m++) {
count += Math.abs(y[l][m] - x[i + l][k + m]);
}
}
if (count === 0) {
res.push([i, k]);
}
}
}