RosettaCodeData/Task/Bitmap-Bresenhams-line-algo.../Nim/bitmap-bresenhams-line-algo...

27 lines
428 B
Nim

import math
proc line(img: var Image, p, q: Point) =
let
dx = abs(q.x - p.x)
sx = if p.x < q.x: 1 else: -1
dy = abs(q.y - p.y)
sy = if p.y < q.y: 1 else: -1
var
p = p
q = q
err = (if dx > dy: dx else: -dy) div 2
e2 = 0
while true:
img[p] = Black
if p == q:
break
e2 = err
if e2 > -dx:
err -= dy
p.x += sx
if e2 < dy:
err += dx
p.y += sy