lsystems/src/Examples.hs
2018-01-16 23:36:41 +00:00

82 lines
1.8 KiB
Haskell

module Examples
( -- * Space-filling curves
gosper
, hilbert
-- * Fractals
, koch
, kochSnowflake
, sierpinski
, sierpinskiArrow
, dragon
) where
import Lib
-- | Gosper curve
gosper :: LSystem Char
gosper = LSystem
"AB+-"
"A"
[ ('A', "A-B--B+A++AA+B-")
, ('B', "+A-BB--B-A++A+B")]
60
10
[('A',Forward), ('B',Forward), ('+',TurnRight), ('-',TurnLeft)]
-- | Hilbert curve
hilbert = LSystem
"ABF+-"
"A"
[ ('A', "-BF+AFA+FB-")
, ('B', "+AF-BFB-FA+")]
90
10
[('F',Forward), ('+',TurnRight), ('-',TurnLeft)]
-- | Koch curve
koch = LSystem
"F+-"
"F"
[('F', "F+F-F-F+F")]
90
10
[('F',Forward), ('+',TurnRight), ('-',TurnLeft)]
-- | Koch snowflake
kochSnowflake = LSystem
"F+-"
"F"
[('F', "F+F--F+F")]
60
10
[('F',Forward), ('+',TurnRight), ('-',TurnLeft)]
-- | Sierpinski triangle
sierpinski = LSystem
"AB+-"
"A-B-B"
[ ('A', "A-B+A+B-A")
, ('B', "BB")]
120
10
[('A',Forward), ('B',Forward), ('+',TurnRight), ('-',TurnLeft)]
-- | Sierpinski arrowhead curve
sierpinskiArrow = LSystem
"AB+-"
"A"
[ ('A', "B+A+B")
, ('B', "A-B-A")]
60
10
[('A',Forward), ('B',Forward), ('+',TurnRight), ('-',TurnLeft)]
-- | Dragon curve
dragon = LSystem
"FX+-"
"FX"
[('X', "X+YF+"),
('Y', "-FX-Y")]
90
10
[('F',Forward), ('+',TurnRight), ('-',TurnLeft)]