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)