From 354f1d57e078d2c202cd27122083e49ee2ec7e47 Mon Sep 17 00:00:00 2001 From: Drak Date: Wed, 19 Sep 2018 12:59:51 +0200 Subject: [PATCH] =?UTF-8?q?T=C3=A9l=C3=A9verser=20Bresenham.js.=20Fonction?= =?UTF-8?q?ne=20avec=20le=20SpriteGenerator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Development Tools/Bresenham.js | 79 ++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 Development Tools/Bresenham.js diff --git a/Development Tools/Bresenham.js b/Development Tools/Bresenham.js new file mode 100644 index 0000000..36484f3 --- /dev/null +++ b/Development Tools/Bresenham.js @@ -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);*/ + } +} + +