-- | Snowflake Fractal.
-- Based on ANUPlot code by Clem Baker-Finch.
--
import Graphics.Gloss
main = displayInWindow
"Snowflake"
(500, 500)
(20, 20)
black
(picture 3)
-- Fix a starting edge length of 360
edge = 360 :: Float
-- Move the fractal into the center of the window and colour it nicely
picture :: Int -> Picture
picture degree
= Color aquamarine
$ Translate (-edge/2) (-edge * sqrt 3/6)
$ snowflake degree
-- The fractal function
side :: Int -> Picture
side 0 = Line [(0, 0), (edge, 0)]
side n
= let newSide = Scale (1/3) (1/3)
$ side (n-1)
in Pictures
[ newSide
, Translate (edge/3) 0 $ Rotate 60 newSide
, Translate (edge/2) (-(edge * sqrt 3)/6) $ Rotate (-60) newSide
, Translate (2 * edge/3) 0 $ newSide ]
-- Put 3 together to form the snowflake
snowflake :: Int -> Picture
snowflake n
= let oneSide = side n
in Pictures
[ oneSide
, Translate edge 0 $ Rotate (-120) $ oneSide
, Translate (edge/2) (edge * sqrt 3/2) $ Rotate 120 $ oneSide]