【问题标题】:Getting X and Y coordinates with the cell number in a grid [duplicate]使用网格中的单元格编号获取 X 和 Y 坐标[重复]
【发布时间】:2020-10-17 10:04:54
【问题描述】:

我有一个如上所示的网格,我想获取单元格 x 和 y 坐标及其编号。

例如:单元格编号 18 => x = 3, y = 4

我已经得到了什么:

const grid = [
    [1, 2, 3, 4, 5],
    [6, 7, 8, 9, 10],
    [11, 12, 13, 14, 15],
    [16, 17, 18, 19, 20],
    [21, 22, 23, 24, 25]
]
const width = grid[0].length //As my grid will always be regular, I just pick the first row's length
const height = grid.length 

console.log(getXYCoords(8, grid))

function getXYCoords(cell, grid) {

//This is where I can't figure out how to do it

}

【问题讨论】:

    标签: javascript


    【解决方案1】:

    嵌套的for 循环可以解决这个问题。首先遍历所有行,然后遍历每一行的列。 y 表示当前行,x 表示当前列。

    检查第二个循环中的匹配项。如果找到匹配项,则返回一个对象,其中包含 xy 坐标。

    const grid = [
      [1, 2, 3, 4, 5],
      [6, 7, 8, 9, 10],
      [11, 12, 13, 14, 15],
      [16, 17, 18, 19, 20],
      [21, 22, 23, 24, 25]
    ];
    
    const rows = grid.length; 
    const columns = grid[0].length;
    
    function getXYCoords(grid, cell) {
      for (let y = 0; y < rows; y++) {
        for (let x = 0; x < columns; x++) {
          if (grid[y][x] === cell) {
            return ({x, y});
          }
        }
      }
      return null;
    }
    
    console.log(getXYCoords(grid, 8))
    console.log(getXYCoords(grid, 19))
    console.log(getXYCoords(grid, 22))

    【讨论】:

    • var fieldWidth = parseInt(width / columns); var columnXY = parseInt(x / fieldWidth); var rowXY = parseInt(y / fieldWidth); return parseInt(columnXY + (rowXY * columns));
    • @AndyGee 需要详细说明吗?
    • 您好,这只是对另一种计算方法的建议,无需任何循环。实际上我使用从零开始的网格,所以我的初始计算是无效的。下面有一个工作变体的永久要点,因为我无法添加答案。 gist.github.com/andyg2/a907a263dafbd2565e9eb26e242de9df
    【解决方案2】:

    简单的 2 个循环解决方案会让您得到结果。

    const grid = [
      [1, 2, 3, 4, 5],
      [6, 7, 8, 9, 10],
      [11, 12, 13, 14, 15],
      [16, 17, 18, 19, 20],
      [21, 22, 23, 24, 25]
    ]
    const width = grid[0].length //As my grid will always be regular, I just pick the first row's length
    const height = grid.length
    
    
    const res = getXYCoords(8, grid);
    console.log(res, grid[res.x][res.y]) // verifies the results
    
    
    function getXYCoords(cell, grid) {
      let x, y;
    
      for(x in grid) {
        for(y in grid[x]){
          if (grid[x][y] === cell) {
            return { x, y };
          }
        }
      }
    }

    您还可以通过记忆函数来提高函数的性能,目前为 O(n^2)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 2013-10-13
      • 2016-10-17
      • 1970-01-01
      相关资源
      最近更新 更多