lsystems/src/Examples.hs
2018-01-17 11:51:38 +00:00

131 lines
2.8 KiB
Haskell

module Examples
( -- * Space-filling curves
gosper
, hilbert
-- * Fractals
, levyC
, koch
, kochSnowflake
, sierpinski
, sierpinskiArrow
, dragon
, tree
, plant
-- * Tilings
, penroseP3
) 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)]
-- | Lévy C curve
levyC = LSystem
"F+-"
"F"
[('F', "+F--F+")]
45
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)]
-- | Binary tree
tree = LSystem
"AB+-[]"
"A"
[('B', "BB")
,('A', "B[+A]-A")]
45
1
[('A',Forward), ('B',Forward), ('+',TurnRight), ('-',TurnLeft), ('[',Push), (']',Pop)]
-- | Fractal plant
plant = LSystem
"FX+-[]"
"X"
[('X', "F[-X][X]F[-X]+FX")
,('F', "FF")]
25
1
[('F',Forward), ('+',TurnRight), ('-',TurnLeft), ('[',Push), (']',Pop)]
-- | Penrose P3
penroseP3 =
LSystem
"MNOPA+-[]"
"[N]++[N]++[N]++[N]++[N]"
[('M',"OA++PA----NA[-OA----MA]++")
,('N',"+OA--PA[---MA--NA]+")
,('O',"-MA++NA[+++OA++PA]-")
,('P',"--OA++++MA[+PA++++NA]--NA")
,('A',"")]
36
10
[('M',Forward), ('N',Forward), ('O',Forward), ('P',Forward), ('A',Forward),
('+',TurnRight), ('-',TurnLeft), ('[',Push), (']',Pop)]