JavaScriptでブレゼンハム
Wikipediaの擬似コードをほぼそっくりそのまま適用できた。
var Bresenham = { getCoordinatesBetween: function(x0, y0, x1, y1) { var dx = Math.abs(x1 - x0); var dy = Math.abs(y1 - y0); var sx = (x0 < x1) ? 1 : -1; var sy = (y0 < y1) ? 1 : -1; var err = dx - dy; var ret = [x0, y0]; while (!((x0 == x1) && (y0 == y1))) { var e2 = err << 1; if (e2 > -dy) { err -= dy; x0 += sx; } if (e2 < dx) { err += dx; y0 += sy; } ret.push(x0); ret.push(y0); } return ret; } };
テスト
// test (function() { var result = Bresenham.getCoordinatesBetween(1, 1, 11, 5); for (var i = 0; i < result.length; i += 2) { console.log("(" + result[i] + ", " + result[i+1] + ")"); } })();
結果
(1, 1) (2, 1) (3, 2) (4, 2) (5, 3) (6, 3) (7, 3) (8, 4) (9, 4) (10, 5) (11, 5)