Мне очень трудно заставить мой код быть правильным.Я пробовал около 3 различных решений, которые я нашел из Google, и все они, кажется, так близко к работе, но, кажется, время от времени пропускает окно ![enter image description here](https://i.stack.imgur.com/cQ20b.png)
Как вы можетеувидеть красную линию почти идеально до конца.
Я использую сегменты для пространственного разделения, и по некоторым причинам это подходит так близко, но не совсем то, что мне нужно.Это код, который у меня есть на данный момент, и мне интересно, в чем может быть проблема
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;
}