82 lines
1.8 KiB
Haskell
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)]
|