[Haskell-cafe] Line drawing algorithm

Neil Brown nccb2 at kent.ac.uk
Fri Jul 17 08:50:30 EDT 2009


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.


More information about the Haskell-Cafe mailing list