RosettaCodeData/Task/Bitmap-Bresenhams-line-algorithm/Scala/bitmap-bresenhams-line-algorithm.scala

25 lines
642 B
Scala
Raw Permalink Normal View History

2013-04-10 16:19:29 -07:00
object BitmapOps {
def bresenham(bm:RgbBitmap, x0:Int, y0:Int, x1:Int, y1:Int, c:Color)={
val dx=math.abs(x1-x0)
val sx=if (x0<x1) 1 else -1
val dy=math.abs(y1-y0)
val sy=if (y0<y1) 1 else -1
def it=new Iterator[Tuple2[Int,Int]]{
var x=x0; var y=y0
var err=(if (dx>dy) dx else -dy)/2
def next={
val res=(x,y)
val e2=err;
if (e2 > -dx) {err-=dy; x+=sx}
if (e2<dy) {err+=dx; y+=sy}
res;
}
2015-11-18 06:14:39 +00:00
def hasNext = (sx*x <= sx*x1 && sy*y <= sy*y1)
2013-04-10 16:19:29 -07:00
}
for((x,y) <- it)
2014-01-17 05:32:22 +00:00
bm.setPixel(x, y, c)
2013-04-10 16:19:29 -07:00
}
}