function plot(X, Y, cc) { cc.fillRect(X,Y,1,1); } function plotLineLow(firstX, firstY, secondX, secondY, cc) { //Dessine la ligne dans le cas où l'écart entre les abscisses est plus grand que l'écart entre les ordonnées. var dx = secondX - firstX; var dy = secondY - firstY; var yi = 1; if (dy < 0) { yi = -1; dy = -dy; } if (dx < 0) { dx = -dx; } var D = 2*dy - dx; /*console.log ("dx = " + dx + " | dy = " + dy + " | D = " + D);*/ var y = firstY; if (firstX > secondX) { for (var x = firstX; x >= secondX; x--) { plot(x, y, cc); if (D > 0) { y += yi; D -= 2*dx; } D += 2 * dy; } } else { for (var x = firstX; x <= secondX; x++) { plot(x, y, cc); if (D > 0) { y += yi; D -= 2*dx; } D += 2 * dy; } } } function plotLineHigh(firstX, firstY, secondX, secondY, cc) { //Dans le cas où ... ? var dx = secondX - firstX; var dy = secondY - firstY; var xi = 1; if (dx < 0) { xi = -1; dx = -dx; } if (dy < 0) { dy = -dy;} var D = 2*dx - dy; /*console.log ("dx = " + dx + " | dy = " + dy + " | D = " + D);*/ var x = firstX; if (firstY > secondY) { for (var y = firstY; y >= secondY; y--) { plot(x, y, cc); if (D > 0) { x += xi; D -= 2*dy; } D += 2*dx; } } else { for (var y = firstY; y <= secondY; y++) { plot(x, y, cc); if (D > 0) { x += xi; D -= 2*dy; } D += 2*dx; } } } function plotLine(firstX, firstY, secondX, secondY, cc) { if (Math.abs(secondY - firstY) < Math.abs(secondX - firstX)) { //Si la différence entre les abscisses est plus grandes que la différence entre les ordonnées... plotLineLow(firstX, firstY, secondX, secondY, cc); } else { //Autrement, on utilise plotLineHigh. plotLineHigh(firstX, firstY, secondX, secondY,cc); /*plotLineHigh(secondX, secondY, firstX, firstY, cc);*/ } }