Advertisement
Guest User

Untitled

a guest
Nov 9th, 2014
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module Main where
  2. import SOE
  3.  
  4. spaceClose :: Window -> IO ()
  5. spaceClose w = do
  6.     k <- getKeyEx w True
  7.     if k == ' '
  8.         then closeWindow w
  9.         else spaceClose w
  10.  
  11. --dir: 1 - Up, -1 - down
  12. equiTriCorners :: (Int, Int) -> Int -> Int -> ((Int, Int), (Int, Int), (Int, Int))
  13. equiTriCorners (x, y) r dir =
  14.     (a, b, c)
  15.     where
  16.         a = (x, y + dir * r)
  17.         b = (x - xshift, y - dir * halfr)
  18.         c = (x + xshift, y - dir * halfr)
  19.         xshift = round $ 0.5 * rr * (sqrt 3) :: Int
  20.         halfr = round $ rr / 2
  21.         rr = (fromIntegral r :: Double)
  22.  
  23. equiTri :: Window -> (Int, Int) -> Int -> Int -> IO ()
  24. equiTri w cent r dir =
  25.     drawInWindow w (polyline [a, b, c, a])
  26.     where
  27.         (a, b, c) = equiTriCorners cent r dir
  28.  
  29. decRate :: Int
  30. decRate = 3
  31. minSize :: Int
  32. minSize = 9
  33.  
  34. snowFlakeFract :: Window -> (Int, Int) -> Int -> IO ()
  35. snowFlakeFract w c r = do
  36.     equiTri w c r 1
  37.     equiTri w c r (-1)
  38.     if r >= minSize
  39.         then do
  40.             snowFlakeFract w a (r `div` decRate)
  41.             snowFlakeFract w b (r `div` decRate)
  42.             snowFlakeFract w g (r `div` decRate)
  43.             snowFlakeFract w d (r `div` decRate)
  44.             snowFlakeFract w e (r `div` decRate)
  45.             snowFlakeFract w f (r `div` decRate)
  46.         else
  47.             return ()
  48.     where
  49.         (a, b, g) = equiTriCorners c r 1            
  50.         (d, e, f) = equiTriCorners c r (-1)
  51.  
  52. main = runGraphics $ do
  53.     w <- openWindow "Snowflake Fractal" (600,600)
  54.     snowFlakeFract w (300, 300) 180
  55.     spaceClose w
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement