我很难使我的代码正确无误。我尝试了从谷歌搜索中找到的3种不同解决方案,它们似乎都非常有效,但是似乎偶尔会错失一个盒子
如您所见,红线直到结束几乎是完美的。
我正在使用存储桶进行空间分区,由于某种原因,存储桶已经很近了,但并不是我所需要的。这是我目前拥有的代码,想知道可能是什么问题
getBucketsForLine(a, b) {
var x0 = Math.floor(a.x / this.cellSize);
var y0 = Math.floor(a.y / this.cellSize);
var x1 = Math.floor(b.x / this.cellSize);
var y1 = Math.floor(b.y / this.cellSize);
var dx = Math.abs(x1 - x0);
var dy = Math.abs(y1 - y0);
var x = x0;
var y = y0;
var n = 1 + dx + dy;
var x_inc = x1 > x0 ? 1 : -1
var y_inc = y1 > y0 ? 1 : -1
var error = dx - dy;
dx *= 2;
dy *= 2;
let cells =[];
while (--n > 0) {
cells.push({ x, y });
if(error > 0) {
x += x_inc;
error -= dy;
} else if (error < 0) {
y += y_inc;
error += dx;
} else if (error === 0) {
x += x_inc;
y += y_inc;
error -= dy;
error += dx;
--n;
}
}
let buckets = [];
for(let i = 0; i < cells.length; i++) {
buckets.push(cells[i].x + cells[i].y * this.columns);
}
return buckets;
}