Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
-- | Tree Fractal.
-- Based on ANUPlot code by Clem Baker-Finch.
--
module Main where
import Graphics.Gloss
main :: IO ()
main = animate (InWindow "Tree" (500, 650) (20, 20))
black (picture 4)
-- The picture is a tree fractal, graded from brown to green
picture :: Int -> Float -> Picture
picture degree time
= Translate 0 (-300)
$ tree degree time (dim $ dim brown)
-- Basic stump shape
stump :: Color -> Picture
stump color
= Color color
$ Polygon [(30,0), (15,300), (-15,300), (-30,0)]
-- Make a tree fractal.
tree :: Int -- Fractal degree
-> Float -- time
-> Color -- Color for the stump
-> Picture
tree 0 time color = stump color
tree n time color
= let smallTree
= Rotate (sin time)
$ Scale 0.5 0.5
$ tree (n-1) (- time) (greener color)
in Pictures
[ stump color
, Translate 0 300 $ smallTree
, Translate 0 240 $ Rotate 20 smallTree
, Translate 0 180 $ Rotate (-20) smallTree
, Translate 0 120 $ Rotate 40 smallTree
, Translate 0 60 $ Rotate (-40) smallTree ]
-- A starting colour for the stump
brown :: Color
brown = makeColorI 139 100 35 255
-- Make this color a little greener
greener :: Color -> Color
greener c = mixColors 1 10 green c