获取二维数组中邻居的坐标

托马兹·德罗兹多夫斯基

我正在寻找一种方法来获取二维数组中邻居的坐标。我面临的问题是我想定义远方邻居的数量。我知道如何使用以下向量获得直接的 8 个邻居:

var distance = 1;
var top_left = array[x-distance ][y-distance ];

...等等。但我想在这个代码片段中获得更广泛的邻居。

var Move = function() {

  var that = this;

  this.grid = {
    width: 12,
    height: 12
  };

  this.showMoveableTiles = function() {
    var movableTiles = 3;
    var row = $(this).data('row');
    var tile = $(this).data('tile');

    $('.tile').removeClass('moveable');

    $('#grid .tile').filter(function() {
      return Math.abs($(this).data('row') - row) <= movableTiles && Math.abs($(this).data('tile') - tile) <= movableTiles && !($(this).data('row') == row && $(this).data('tile') == tile)
    }).addClass('moveable');
  };

};

var makeGrid = function(width, height) {
  var tiles = '';

  for (var row = 0; row < height; row++) {
    for (var tile = 1; tile <= width; tile++) {
      tiles += '<div class="tile" data-tile="' + tile + '" data-row="' + (row + 1) + '"></div>';
    }
  }

  $('#grid').append(tiles);
};

var move = new Move();

makeGrid(10, 10);

$(document).on('mousedown', '.tile', move.showMoveableTiles);
#grid {
  width: 300px;
  cursor: pointer;
}

.tile {
  width: 30px;
  height: 30px;
  background-color: #777;
  outline: 1px solid goldenrod;
  float: left;
}

.tile:hover {
  background-color: #999;
}

.moveable {
  background-color: #add8e6;
}

.moveable:hover {
  background-color: #c8ebf7;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="grid"></div>

用户3297291

您可以使用slice从二维数组中切出块。要确定您需要哪些部分,您可以计算该区域中的哪些行和哪些列。

假设您在 处有一个点x: 3, y: 5,并且想要size: 2该位置周围的面积,您将计算:

var topRow = y - size;
var bottomRow = y + size;
var leftColumn = x - size;
var rightColumn = x + size;

现在,您可以遍历行并使用切片每行 row.slice(leftColumn, rightColumn + 1)

下面的示例显示了它是如何完成的,但我没有包含您的确切示例。此外,它不适用于太靠近网格边缘而无法处理所需大小的坐标。我会让你来解决这个问题。(另外,它在 ES6 中)

const getArea = (x, y, s, grid) => {
  const topRow = y - s;
  const bottomRow = y + s;
  const leftCol = x - s;
  const rightCol = x + s;
  
  const gridArea = [];
  
  for (let r = topRow; r <= bottomRow; r += 1) {
    gridArea.push(grid[r].slice(leftCol, rightCol + 1));
  }
  
  return gridArea;
}


const tenxTen = makeGrid(10, 10);

// Get one element
logGrid(getArea(0, 0, 0, tenxTen));

// Get 3x3 around x:1, y:1 (b1)
logGrid(getArea(1, 1, 1, tenxTen));

// Get 7x7 around x:5, y:5 (f5)
logGrid(getArea(5, 5, 3, tenxTen));



// Utils
function makeRow(i, w) {
  return Array.from(Array(w), (_, j) => 
    "abcdefghijklmnopqrstuvwxyz"[i] + (j));
};

function makeGrid(w, h) {
  return Array.from(Array(h), (_, i) => makeRow(i, w))
};

function logGrid(grid) {
  console.log(grid.map(r => r.join("|")));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

二维数组python中的邻居

来自分类Dev

在二维数组中查找邻居

来自分类Dev

查找二维数组中指定坐标的邻居

来自分类Dev

直接在二维数组/网格中的值/节点旁边获取“邻居”

来自分类Dev

在二维numpy数组中获取邻居的有效方法

来自分类Dev

在二维数组中寻找最小的邻居

来自分类Dev

在二维数组中寻找最小的邻居

来自分类Dev

检查二维数组中每个邻居的最快方法

来自分类Dev

从指定坐标和方向的二维数组中获取n个元素

来自分类Dev

如何跟踪和查找二维数组中的坐标

来自分类Dev

计算二维数组中的值并返回坐标

来自分类Dev

二维数组中的坐标接近度

来自分类Dev

如何跟踪和查找二维数组中的坐标

来自分类Dev

获取二维numpy数组中最大值的邻居

来自分类Dev

获取二维数组中的数组数

来自分类Dev

从二维double [] []数组中获取子数组

来自分类Dev

在二维数组中查找有效的邻居索引

来自分类Dev

检查二维数组中已连接邻居的算法

来自分类Dev

检查二维数组中已连接邻居的算法

来自分类Dev

二维字符数组中的邻居数不正确 (C)

来自分类Dev

二维数组的Numpy-get邻居矩阵

来自分类Dev

在Python中获取二维数组的乘积

来自分类Dev

从java中的二维数组获取列

来自分类Dev

如何动态获取二维数组中的位置

来自分类Dev

excel在二维数组中匹配值(获取行)

来自分类Dev

如何从二维数组列表中获取价值

来自分类Dev

如何从二维数组中获取特定值

来自分类Dev

从二维数组中获取用户输入

来自分类Dev

如何从二维对象数组中获取数据?