All pastes #2086454 Raw Edit

Unnamed

public text v1 · immutable
#2086454 ·published 2011-10-03 14:02 UTC
rendered paste body
-- Sierpinski Carpet                                   --

-- Copied from Paul Hudak's Haskell School of Expression --



import SOE



fillSqu :: Window -> Int -> Int -> Int -> IO ()

fillSqu w x y size =

  drawInWindow w (withColor Blue 

                    (polygon [(x,y), (x + size, y), (x + size, y + size), (x, y + size)]))



minSize :: Int

minSize = 1



carpet :: Window -> Int -> Int -> Int -> IO ()

carpet w x y size =

  if size <= minSize then 

    fillSqu w x y size 

  else 

    let size3 = size `div` 3 in

    do carpet w (x-size3) y size3

       carpet w (x-size3) (y-size3) size3

       carpet w (x-size3) (y+size3) size3
       carpet w (x+size3) y size3

       carpet w (x+size3) (y-size3) size3

       carpet w (x+size3) (y+size3) size3

       carpet w x (y-size3) size3

       carpet w x (y+size3) size3



spaceClose :: Window -> IO ()

spaceClose w =

  do k <- getKey w

     if k == ' ' then closeWindow w

 		 else spaceClose w



main =

  runGraphics $ do

    w <- openWindow "Sierpinski's Carpet" (360, 360)

    carpet w 180 180 256

    spaceClose w