javascript - 如何在 javascript 中选择二维矩阵的同心元素?

标签 javascript

如何选择/组合二维矩阵的同心元素?

以下是创建二维数组的代码。

function Create2DArray(rows) {
  var arr = [];

  for (var i=0;i<rows;i++) {
     arr[i] = [];
  }

  return arr;
}

假设一个元素位于矩阵的中心,地址为 i,j

如何按以下方式分离细胞?

enter image description here

这样只有突出显示的元素被组合在一起/分开。

如果一个数学算法,而不是循环很多,那就太好了。 (因为这样会更有效率)

注意

上述方法仅在矩阵大小为奇数时有效,即 3 x 35 x 57 x 7 等。 .. 因此,如果有一种方法可以为大于 3 的偶数矩阵实现这一点,也请提出建议(对于大于或等于 4 的矩阵,有一个奇数大小的矩阵子集,我们可以使用它来实现上述算法并丢弃剩​​余的)..

请使用数学/索引来切出同心单元,而不是使用传统的迭代器或任何类似的东西,因为这样可以加快计算速度(...因为您可以从中心地址(或索引)开始并递减/递增)(如果可能,如果不可能,你可以建议任何方法)

可能的输出可以是数组,也可以是对应单元格地址的对象

像这样跨越:

index/key 1-> level 1 concentric cells
index/key 2-> level 2 concentric cells
index/key 3-> level 3 concentric cells
...

或者可能的输出可能只是遍历每个连续级别的一种方式,而不是将同心单元分组;就像如果第一层的同心细胞被遍历 alert(level 1)... 然后在第二层之后 alert(level 2) 等等...

最佳答案

您可以从中心点(可以是行/列的任何点)开始,然后循环每一行和每一列,并根据距该中心点的空间进行检查。

function genMatrix(rows, cols) {
  return Array.from(Array(rows), () => {
    return Array(cols).fill(0)
  })
}

function select(matrix, [cRow, cCol], space = 0) {
  for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[i].length; j++) {
      if (space === 0) {
        // for center point
        if (i == cRow && j == cCol) {
          matrix[i][j] = 3
        }
      } else {
        // for horizontal points
        if (i == cRow - space || i == cRow + space) {
          if (j <= cCol + space && j >= cCol - space) {
            matrix[i][j] = 3
          }
        }

        // for vertical points
        if (j == cCol - space || j == cCol + space) {
          if (i <= cRow + space && i >= cRow - space) {
            matrix[i][j] = 3
          }
        }

      }
    }
  }

  return matrix
}


const center = [3, 3];

const result = [
  select(genMatrix(7, 7), center),
  select(genMatrix(7, 7), center, 1),
  select(genMatrix(7, 7), center, 2),
  select(genMatrix(7, 7), center, 3)
]

// for the demo
result.forEach(matrix => {
  matrix.forEach(row => console.log(JSON.stringify(row)))
  console.log('-'.repeat(20))
})

关于javascript - 如何在 javascript 中选择二维矩阵的同心元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64297652/

相关文章:

javascript - 诺基亚缩放更改事件此处 map

javascript - 使 str.index() 只匹配整个单词

javascript - Pdf.js 的加载栏

javascript - Chrome 扩展的内容脚本捕获自定义事件?

javascript - 如何将一个选择框设置为与另一个选择框相同?

javascript - 使用 jQuery 向服务器发出请求

javascript - 如何使用javascript填写网页表单

javascript - 发送消息到 console.log (jest puppeteer)

javascript - return false 或 return true 不会跳到 jQuery 中的下一个循环

javascript - 如何在 fullCalendar 中编辑事件?