-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Haskell Lindenmayer Systems -- @package hls @version 0.15 -- | Standard Turtle graphics. module LSystem.Turtle -- | Turtle. data Turtle Turtle :: Double -> Double -> Pt Double -> Double -> Double -> Double -> [Turtle] -> Turtle -- | turning angle ta :: Turtle -> Double -- | turning angle increment tai :: Turtle -> Double -- | location loc :: Turtle -> Pt Double -- | heading hdg :: Turtle -> Double -- | line length ll :: Turtle -> Double -- | line length scalar lls :: Turtle -> Double -- | turtle stack stk :: Turtle -> [Turtle] -- | Right turn by ta. turnRight :: Turtle -> Turtle -- | Left turn by ta. turnLeft :: Turtle -> Turtle -- | 180 degree turn. turnBack :: Turtle -> Turtle -- | Increment line length (ll) by multiplying by line length scalar -- (lls). incrLine :: Turtle -> Turtle -- | Decrement line length (ll) by dividing by line length scalar -- (lls). decrLine :: Turtle -> Turtle -- | Move loc of Turtle by ll on current hdg. forward :: Turtle -> Turtle -- | Push Turtle onto stk. push :: Turtle -> Turtle -- | Fetch Turtle from stk. pop :: Turtle -> Turtle -- | Given state processing function f, a Turtle and an -- initial state, step Turtle and state. stepTurtle :: (t -> Pt R -> Pt R -> b) -> Turtle -> t -> (Turtle, b) -- | Lindenmayer system definition, expander and renderer. module LSystem.LSystem -- | Element of Axiom. type Element = Char -- | An axiom (sequence of Elements). type Axiom = [Element] -- | A Map from Elements to Axioms. type Rules = Map Element Axiom -- | An LSystem is an Axiom and a set of Rules. data LSystem LSystem :: Axiom -> Rules -> LSystem -- | L-System constructor. -- --
--   lSystem "F+F+F" [('F',"F-F+F")]
--   
lSystem :: Axiom -> [(Element, [Element])] -> LSystem -- | Rule lookup. getRule :: Rules -> Element -> [Element] -- | Rule application. applyRule :: [Element] -> Rules -> [Element] -- | n iterations of the specified LSystem. -- --
--   let f p q n = expand (lSystem p q) n
--   f  "A" [('A',"AB"),('B',"A")] 5 == "ABAABABAABAAB"
--   f "0" [('1',"11"),('0',"1[0]0")] 3 == "1111[11[1[0]0]1[0]0]11[1[0]0]1[0]0"
--   f  "A" [('A',"ABA"),('B',"BBB")] 3 == "ABABBBABABBBBBBBBBABABBBABA"
--   f  "F" [('F',"F+F-F-F+F")] 2 == "F+F-F-F+F+F+F-F-F+F-F+F-F-F+F-F+F-F-F+F+F+F-F-F+F"
--   f "F+F+F" [('F',"F-F+F")] 1 == "F-F+F+F-F+F+F-F+F"
--   
expand :: LSystem -> Int -> [Element] -- | State transformer Turtle commands. stateT :: Element -> Turtle -> Turtle -- | Operational Turtle commands. cmd :: (Turtle -> b -> (Turtle, b)) -> Element -> Turtle -> b -> (Turtle, b) -- | Fold over an expanded L-system using standard turtle commands. render :: b -> (b -> Pt R -> Pt R -> b) -> [Element] -> Turtle -> b instance Eq LSystem instance Show LSystem -- | Postscript renderer for LSystems. module LSystem.Render.PS -- | Given initial ta, ls and lls values render -- i steps of an LSystem. renderL :: (LSystem, Double, Double) -> Int -> Double -> [Ln R] -- | Draw output of renderL normalised, scaled to m and -- translated by o. draw :: R -> R -> [Ln R] -> Image -- | Various LSystems. For l0 through lB see -- http://paulbourke.net/fractals/lsys/. For lC see -- http://en.wikipedia.org/wiki/Penrose_tiling. For lD see -- http://hackage.haskell.org/package/nymphaea. For p0 -- etc. see http://algorithmicbotany.org/papers/#abop. module LSystem.Systems l0 :: LSystem lB :: LSystem lA :: LSystem l9 :: LSystem l8 :: LSystem l7 :: LSystem l6 :: LSystem l5 :: LSystem l4 :: LSystem l3 :: LSystem l2 :: LSystem l1 :: LSystem lC :: LSystem lD :: LSystem p00 :: LSystem p01 :: LSystem p02 :: LSystem p03 :: LSystem p04 :: LSystem p05 :: LSystem p00d :: (LSystem, Double, Double) p01d :: (LSystem, Double, Double) p02d :: (LSystem, Double, Double) p03d :: (LSystem, Double, Double) p04d :: (LSystem, Double, Double) p05d :: (LSystem, Double, Double) p00l_a :: [Ln R] p00l_b :: [Ln R] p00l_c :: [Ln R] p00l_d :: [Ln R] p01l :: [Ln R] p02l :: [Ln R] p03l :: [Ln R] p04l :: [Ln R] p05l :: [Ln R] l0d :: (LSystem, Double, Double) lDd :: (LSystem, Double, Double) lCd :: (LSystem, Double, Double) lBd :: (LSystem, Double, Double) lAd :: (LSystem, Double, Double) l9d :: (LSystem, Double, Double) l8d :: (LSystem, Double, Double) l7d :: (LSystem, Double, Double) l6d :: (LSystem, Double, Double) l5d :: (LSystem, Double, Double) l4d :: (LSystem, Double, Double) l3d :: (LSystem, Double, Double) l2d :: (LSystem, Double, Double) l1d :: (LSystem, Double, Double) l0l :: [Ln R] lDl :: [Ln R] lCl :: [Ln R] lBl :: [Ln R] lAl :: [Ln R] l9l :: [Ln R] l8l :: [Ln R] l7l :: [Ln R] l6l :: [Ln R] l5l :: [Ln R] l4l :: [Ln R] l3l :: [Ln R] l2l :: [Ln R] l1l :: [Ln R] systems_l :: [[Ln R]] systems_i :: [Image] -- | Generate postscript file with drawings of l0 through lD. -- --
--   systems_ps "/tmp/hls.ps"
--   System.Process.system "gv /tmp/hls.ps"
--   
systems_ps :: FilePath -> IO ()