Поиск, через какие ячейки проходит линия в сетке - PullRequest
0 голосов
/ 25 ноября 2018

Мне очень трудно заставить мой код быть правильным.Я пробовал около 3 различных решений, которые я нашел из Google, и все они, кажется, так близко к работе, но, кажется, время от времени пропускает окно enter image description here

Как вы можетеувидеть красную линию почти идеально до конца.

Я использую сегменты для пространственного разделения, и по некоторым причинам это подходит так близко, но не совсем то, что мне нужно.Это код, который у меня есть на данный момент, и мне интересно, в чем может быть проблема

 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;

    }
...