Bitmap/Bresenham's line algorithm: Difference between revisions
Content added Content deleted
m (→version 1: added wording to the REXX section header.) |
(Added Wren) |
||
Line 3,979: | Line 3,979: | ||
y += ystep |
y += ystep |
||
error += deltax</lang> |
error += deltax</lang> |
||
{{libheader|DOME}} |
|||
Requires version 1.3.0 of DOME or later. |
|||
<lang ecmascript>import "graphics" for Canvas, ImageData, Color |
|||
import "dome" for Window |
|||
class Game { |
|||
static bmpCreate(name, w, h) { ImageData.create(name, w, h) } |
|||
static bmpFill(name, col) { |
|||
var image = ImageData[name] |
|||
for (x in 0...image.width) { |
|||
for (y in 0...image.height) image.pset(x, y, col) |
|||
} |
|||
} |
|||
static bmpPset(name, x, y, col) { ImageData[name].pset(x, y, col) } |
|||
static bmpPget(name, x, y) { ImageData[name].pget(x, y) } |
|||
static bmpLine(name, x0, y0, x1, y1, col) { |
|||
var dx = (x1 - x0).abs |
|||
var dy = (y1 - y0).abs |
|||
var sx = (x0 < x1) ? 1 : -1 |
|||
var sy = (y0 < y1) ? 1 : -1 |
|||
var err = ((dx > dy) ? dx : - dy).floor / 2 |
|||
while (true) { |
|||
bmpPset(name, x0, y0, col) |
|||
if (x0 == x1 && y0 == y1) break |
|||
var e2 = err |
|||
if (e2 > -dx) { |
|||
err = err - dy |
|||
x0 = x0 + sx |
|||
} |
|||
if (e2 < dy) { |
|||
err = err + dx |
|||
y0 = y0 + sy |
|||
} |
|||
} |
|||
} |
|||
static init() { |
|||
Window.title = "Bresenham's line algorithm" |
|||
var size = 200 |
|||
Window.resize(size, size) |
|||
Canvas.resize(size, size) |
|||
var name = "bresenham" |
|||
var bmp = bmpCreate(name, size, size) |
|||
bmpFill(name, Color.white) |
|||
bmpLine(name, 50, 100, 100, 190, Color.black) |
|||
bmpLine(name, 100, 190, 150, 100, Color.black) |
|||
bmpLine(name, 150, 100, 100, 10, Color.black) |
|||
bmpLine(name, 100, 10, 50, 100, Color.black) |
|||
bmp.draw(0, 0) |
|||
} |
|||
static update() {} |
|||
static draw(alpha) {} |
|||
}</lang> |
|||
=={{header|XPL0}}== |
=={{header|XPL0}}== |