parts = {
const parts = [];
let X = Math.floor(x0/(1/d));
let Y = Math.floor(y0/(1/d));
let FX = Math.floor(x1/(1/d));
let FY = Math.floor(y1/(1/d));
const stepX = x1 > x0 ? 1 : -1;
const stepY = y1 > y0 ? 1 : -1;
const dx = x1 - x0;
const dy = y1 - y0;
const nextX = (X+stepX)*(1/d);
const nextY = (Y+stepY)*(1/d);
let tMaxX = (nextX - x0) / dx;
let tMaxY = (nextY - y0) / dy;
const tDeltaX = (1/d) / dx * stepX;
const tDeltaY = (1/d) / dy * stepY;
parts.push({ x: X/d, y: Y/d });
for (let iii=0; iii<maxIter && !(X == FX && Y == FY); ++iii) {
let f;
if (tMaxX < tMaxY) {
tMaxX += tDeltaX;
X += stepX;
f = false;
} else {
tMaxY += tDeltaY;
Y += stepY;
f = true;
}
parts.push({ x: X/d, y: Y/d, f });
}
return parts;
};