Permalink
Fetching contributors…
Cannot retrieve contributors at this time
65 lines (50 sloc) 1.74 KB
-- A nifty animated fractal of a tree, superimposed on a background
-- of three red rectangles.
import Graphics.Gloss
main :: IO ()
main
= animate (InWindow "Zen" (800, 600) (5, 5))
(greyN 0.2)
frame
-- Produce one frame of the animation.
frame :: Float -> Picture
frame timeS
= Pictures
-- the red rectangles
[ Translate 0 150 backRec
, Translate 0 0 backRec
, Translate 0 (-150) backRec
-- the tree
, Translate 0 (-150) $ treeFrac 7 timeS
]
-- One of the red backing rectangles, with a white outline.
backRec :: Picture
backRec
= Pictures
[ Color red (rectangleSolid 400 100)
, Color white (rectangleWire 400 100) ]
-- The color for the outline of the tree's branches.
treeOutline :: Color
treeOutline = makeColor 0.3 0.3 1.0 1.0
-- The color for the shading of the tree's branches.
-- The Alpha here is set to 0.5 so the branches are partly transparent.
treeColor :: Color
treeColor = makeColor 0.0 1.0 0.0 0.5
-- The tree fractal.
-- The position of the branches changes depending on the animation time
-- as well as the iteration number of the fractal.
treeFrac :: Int -> Float -> Picture
treeFrac 0 _ = Blank
treeFrac n timeS
= Pictures
[ Color treeColor $ rectangleUpperSolid 20 300
, Color treeOutline $ rectangleUpperWire 20 300
, Translate 0 30
$ Rotate (200 * sin timeS / (fromIntegral n) )
$ Scale 0.9 0.9
$ treeFrac (n-1) timeS
, Translate 0 70
$ Rotate (-200 * sin timeS / (fromIntegral n))
$ Scale 0.8 0.8
$ treeFrac (n-1) timeS
]