<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman,new york,times,serif;font-size:12pt"><div>Thanks Neil,<br>That helped. Now the code looks better - I still feel a little bad about the way I repeat calls to line' though - I was thinking of using a partially applied function with (newX,newY) as the last parameter - but that'll make the code less readable.<br><br>line :: Point -> Point -> [Point]<br>line (xa,ya) (xb,yb) = line' (x1,y1) (x2,y2) deltax deltay ystep isSteep 0<br> where<br> isSteep = abs (yb - ya) > abs (xb - xa)<br> (xa',ya',xb',yb') = if isSteep<br> then (ya,xa,yb,xb)<br> else (xa,ya,xb,yb)<br> (x1,y1,x2,y2) = if xa' > xb'<br> then (xb',yb',xa',ya')<br> else
(xa',ya',xb',yb')<br> deltax = x2 - x1<br> deltay = abs (y2 - y1)<br> ystep = if y1 < y2 then 1 else -1<br><br><br>line' (x1, y1) (x2, y2) deltax deltay ystep isSteep error<br> | x1 == x2 = if isSteep then [(y1, x1)] else [(x1, y1)]<br> | isSteep =<br> (y1, x1) :<br> line' (newX, newY) (x2, y2) deltax deltay ystep isSteep newError<br> | otherwise =<br> (x1, y1) :<br> line' (newX, newY) (x2, y2) deltax deltay ystep isSteep newError<br> where newX = x1 + 1<br> tempError = error + deltay<br> (newY, newError)<br> = if (2 * tempError) >= deltax then<br> (y1 + ystep,
tempError - deltax) else (y1, tempError)<br><br>Regards,<br>Kashyap<br></div><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"><br><div style="font-family: arial,helvetica,sans-serif; font-size: 10pt;"><font face="Tahoma" size="2"><hr size="1"><b><span style="font-weight: bold;">From:</span></b> Neil Mitchell <ndmitchell@gmail.com><br><b><span style="font-weight: bold;">To:</span></b> CK Kashyap <ck_kashyap@yahoo.com><br><b><span style="font-weight: bold;">Cc:</span></b> haskell-cafe@haskell.org<br><b><span style="font-weight: bold;">Sent:</span></b> Tuesday, July 28, 2009 6:44:58 PM<br><b><span style="font-weight: bold;">Subject:</span></b> Re: [Haskell-cafe] Need feedback on my Haskell code<br></font><br>
Hi Kashyap,<br><br>My first suggestion would be to run HLint over the code<br><span>(<a target="_blank" href="http://community.haskell.org/%7Endm/hlint">http://community.haskell.org/~ndm/hlint</a>) - that will spot a few easy</span><br>simplifications.<br><br>Thanks<br><br>Neil<br><br>On Tue, Jul 28, 2009 at 2:04 PM, CK Kashyap<<a ymailto="mailto:ck_kashyap@yahoo.com" href="mailto:ck_kashyap@yahoo.com">ck_kashyap@yahoo.com</a>> wrote:<br>> Hi Everyone,<br>> I managed to write up the line drawing function using the following links -<br><span>> <a target="_blank" href="http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html">http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html</a></span><br><span>> <a target="_blank" href="http://rosettacode.org/wiki/Bresenham%27s_line_algorithm#Haskell">http://rosettacode.org/wiki/Bresenham%27s_line_algorithm#Haskell</a></span><br>><br>> line :: Point -> Point ->
[Point]<br>> line (xa,ya) (xb,yb) = line' (x1,y1) (x2,y2) deltax deltay ystep isSteep 0<br>> where<br>> isSteep = abs (yb - ya) > abs (xb - xa)<br>> (xa',ya',xb',yb') = if isSteep<br>> then (ya,xa,yb,xb)<br>> else (xa,ya,xb,yb)<br>> (x1,y1,x2,y2) = if xa' > xb'<br>> then (xb',yb',xa',ya')<br>> else (xa',ya',xb',yb')<br>> deltax = x2 - x1<br>> deltay = abs (y2 - y1)<br>> ystep = if y1 < y2 then 1 else -1<br>><br>><br>> line' :: Point -> Point -> Integer -> Integer -> Integer -> Bool -> Integer<br>> -> [Point]<br>> line' (x1,y1) (x2,y2) deltax deltay ystep isSteep error =<br>> if x1 == x2<br>> then if isSteep then
[(y1,x1)] else [(x1,y1)]<br>> else<br>> if isSteep<br>> then [(y1,x1)] ++ line' (newX,newY) (x2,y2) deltax deltay ystep<br>> isSteep newError<br>> else [(x1,y1)] ++ line' (newX,newY) (x2,y2) deltax deltay ystep<br>> isSteep newError<br>> where<br>> newX = x1 + 1<br>> tempError = error + deltay<br>> (newY, newError) = if (2*tempError) >= deltax then<br>> (y1+ystep,tempError-deltax) else (y1,tempError)<br>><br>><br>> Can someone please provide feedback on this? In terms of, how do I get more<br>> Haskell'ism into it.<br>><br>> Regards,<br>> Kashyap<br>><br>><br>>
_______________________________________________<br>> Haskell-Cafe mailing list<br>> <a ymailto="mailto:Haskell-Cafe@haskell.org" href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br><span>> <a target="_blank" href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a></span><br>><br>><br></div></div></div><br>
</body></html>