Téléverser Bresenham.js. Fonctionne avec le SpriteGenerator

This commit is contained in:
Drak 2018-09-19 12:59:51 +02:00
parent fc494ce42c
commit 354f1d57e0
1 changed files with 79 additions and 0 deletions

View File

@ -0,0 +1,79 @@
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);*/
}
}