本质上,我正在尝试创建游戏黑白棋。如果你不知道它是什么,为了缩短它,我有一个 8x8 的方格板。有 2 个坐标,我需要确定这两个坐标之间的所有正方形并填充它们。这两个坐标要么在同一个 y 上,要么在同一个 x 上,要么在彼此对角线上。
有人可以解释我将如何做这样的事情背后的逻辑吗?如何确定 2 个坐标之间所有元素的坐标。
本质上,我正在尝试创建游戏黑白棋。如果你不知道它是什么,为了缩短它,我有一个 8x8 的方格板。有 2 个坐标,我需要确定这两个坐标之间的所有正方形并填充它们。这两个坐标要么在同一个 y 上,要么在同一个 x 上,要么在彼此对角线上。
有人可以解释我将如何做这样的事情背后的逻辑吗?如何确定 2 个坐标之间所有元素的坐标。
您需要一个简单的 for 循环,从一个坐标开始,然后向另一个坐标移动。
let connect = (c1, c2) => {
// Determine the distance between c1 & c2
let delta = c1.map((v, i) => c2[i] - v);
let distance = Math.max(...delta.map(v => Math.abs(v)));
// Determine the unit vector (e.g. [1, -1]) to move each iteration
let direction = delta.map(v => v / distance);
// Starting at `c1`, iterate for `distance` iterations, moving in `direction` each iteration.
return [...Array(distance + 1)].map((_, i) => c1.map((v, j) => v + direction[j] * i));
// Same as above, but exclude `c1` and `c2` from the return array.
// return [...Array(distance - 1)].map((_, i) => c1.map((v, j) => v + direction[j] * (i + 1)));
};
let c1 = [3, 6];
let c2 = [8, 1];
console.log(connect(c1, c2));