CK Kashyap wrote:
Hi All,
I am working on a diagraming utility in Haskell. I started with line
drawing.
I am doing the basic stuff using the y = mx + c formula to draw a line
between (x1,y1) and (x2,y2)
Hi,
Are you doing this to learn Haskell, learn about drawing lines, or to
just get it implemented? If either of the latter two, when drawing a
straight line you shouldn't need to do floating point operations such as
this:
newY = y1 + round (slope * (fromIntegral (newX - x1)))
Bresenham's algorithm (or similar variants) allows you to draw a line
without needing floating point. A Haskell implementation is here:
http://rosettacode.org/wiki/Bresenham%27s_line_algorithm#Haskell
Although it may not be too understandable! Wikipedia has an explanation
of the general algorithm:
http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm
As to how to cope with the dy > dx case in your code given the dx > dy
case, you could just swap the x and y coords at the start, then swap
back the x and y coords of all the output points afterwards. Odd, but
effective :-)
Thanks,
Neil.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe