<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><a href="mailto:haskell-cafe@haskell.org" class="external text" title="mailto:haskell-cafe@haskell.org" rel="nofollow"></a>Hi All,<br><br>I am working on a diagraming utility in Haskell. I started with line drawing.<br>I am doing the basic stuff using the y = mx + c formula to draw a line between (x1,y1) and (x2,y2)<br><br>Here's what I need to do - <br>if dx &gt; dy where dx = (x2 - x1) and dy = (y2 - y1) then I need to vary x between x1 and x2 and find the various y's<br>however if dy &gt; dx then I need to vary y beteen y1 and y2 and get various x's <br><br>In the code below, I've only taken care of the situation where dx &gt; dy - I was thinking if there was a better way to<br>do it that takes care of the other condition as well without repeating the code.<br><br><br>type Point =
 (Integer,Integer)<br><br>line :: Point -&gt; Point -&gt; [Point] -- get all the points in the line<br>line p1@(x1,y1) p2@(x2,y2) = line' start end start slope<br>&nbsp; where<br>&nbsp;&nbsp;&nbsp; (start,end) = reorderPoints p1 p2<br>&nbsp;&nbsp;&nbsp; slope = ((fromIntegral (y2-y1)) / (fromIntegral (x2-x1)))<br>&nbsp;&nbsp;&nbsp; reorderPoints (px1,py1) (px2,py2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | px1 &lt; px2 = (p1,p2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | otherwise = (p2,p1)<br><br>line' :: Point -&gt; Point -&gt; Point -&gt; Double -&gt; [Point]<br>line' start@(x1,y1) end@(x2,y2) point@(x3,y3) slope<br>&nbsp; | x3 == x2 = [end]<br>&nbsp; | otherwise = [point] ++ line' start end (newX,newY) slope<br>&nbsp; where<br>&nbsp;&nbsp;&nbsp; newX = x3 + 1<br>&nbsp;&nbsp;&nbsp; newY = y1 + round (slope * (fromIntegral (newX - x1)))<br><br><br>hello = line (1,1) (10,10)<br><br><br>Regards,<br>Kashyap<br></div></div><br>



      </body></html>