gpt4 book ai didi

javascript - 使用边界条件检查二维数组中的附近点

转载 作者:行者123 更新时间:2023-11-30 21:19:47 24 4
gpt4 key购买 nike

我有一个程序可以检查数组数组中的坐标,并搜索附近的坐标以找到最近的 5 个具有“事件”的坐标。然而,当在网格的边缘时,在这个例子中 (0,0),我面临着同一事件被多次返回但距离不同的“距离”的问题(这个距离是曼哈顿距离)。

我认为发生这种情况是因为我设置了参数,如果它要检查的坐标在网格之外(小于 0),它的值将更改为匹配边界 (0)。

let check = (x, y, d) => {
if (x > 20) {
x = 20;
}
if (x < 0) {
x = 0;
}
if (y > 20) {
y = 20;
}
if (y < 0) {
y = 0;
}

if (Main[x][y].event) {
let info = {
x: x - (xRange/2),
y: y - (xRange/2),
event: Main[x][y].event,
distance: d,
ticket: Main[x][y].tickets[0],
}
return info;
} else {
return false;
}
}

let findEvents = (x, y) => {
let nearby = [];
let info;

// Check point x, y
if (Main[x][y].event) {
info = {
x: x - (xRange/2),
y: y - (xRange/2),
event: Main[x][y].event,
distance: 0,
tickets: Main[x][y].tickets,
}
nearby.push(info);
}

for (let d = 1; d <= 40; d++) {
for (let i = 0; i < d + 1; i++) {

info = check(x - d + i, y - i, d);

if (info) {
nearby.push(info);
}
if ((nearby.length > 5) &&
(nearby[(nearby.length-1)].distance !=
nearby[(nearby.length-2)].distance)) {
return nearby.slice(0,-1);
}

info = check(x + d - i, y + i, d);

if (info) {
nearby.push(info);
}
if ((nearby.length > 5) &&
(nearby[(nearby.length-1)].distance !=
nearby[(nearby.length-2)].distance)) {
return nearby.slice(0,-1);
}
}

for (let i = 1; i < d; i++) {

info = check(x - i, y + d - i, d);

if (info) {
nearby.push(info);
}
if ((nearby.length > 5) &&
(nearby[(nearby.length-1)].distance !=
nearby[(nearby.length-2)].distance)) {
return nearby.slice(0,-1);
}

info = check(x + d - i, y - i, d);

if (info) {
nearby.push(info);
}
if ((nearby.length > 5) &&
(nearby[(nearby.length-1)].distance !=
nearby[(nearby.length-2)].distance)) {
return nearby.slice(0,-1);
}
}
}
return nearby;
}

关于如何避免这种情况的任何提示? (或者总体上清理我的代码 :D )

最佳答案

我还不完全理解您的 find_events 方法,但似乎可以避免您描述的问题,只要点在网格外,您就应该从 check 返回 false。因此:

let check = (x, y, d) => {
if (x > 20 || x < 0 || y > 20 ||y < 0) {
return false;
}
...

关于javascript - 使用边界条件检查二维数组中的附近点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45315158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com