80 lines
1.8 KiB
JavaScript
80 lines
1.8 KiB
JavaScript
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);*/
|
|
}
|
|
}
|
|
|
|
|