JsLoveR,
Спасибо. Я нашел немного другой, он по скорости чуть чуть быстрее:
function setLine (x1, y1, x2, y2) {
var x = x1,
y = y1;
var dx = Math.abs(x2-x1),
dy = Math.abs(y2-y1);
var sx = (x2-x1)>0?1:((x2-x1)==0?0:-1);
var sy = (y2-y1)>0?1:((y2-y1)==0?0:-1);
var tx, ty;
var z, scount, count, dcount;
if (dx>=dy) {
tx = sx; ty = 0;
} else {
z=dx; dx=dy; dy=z;
tx=0; ty=sy;
}
scount = 2*dy;
count = scount-dx;
dcount = count-dx;
for(;;) {
dx -= 1;
if (dx < -1){
break;
}
setPixel(x, y);
if (count >= 0) {
x+=sx;
y+=sy;
count += dcount;
} else {
x+=tx;
y+=ty;
count += scount;
}
}
}