context-free-art-0.3.0.1: examples/Sierpinski/Triangle.hs
module Sierpinski.Triangle ( sierpinskiTriangle ) where
import Art.ContextFree.Definite
import Data.List.NonEmpty
h :: Float
h = sqrt (1 - 0.5 ** 2.0)
layer :: Int -> Symbol
layer 0 = Poly [(0.5, -h), (0.5, h)]
layer n
= let a = layer (n - 1)
b = Mod [Move (0.5, -h)] a
c = Mod [Move (1, 0)] a
in Mod [Scale 0.5] $ Branch $ a :| [b, c]
sierpinskiTriangle :: Symbol
sierpinskiTriangle = layer 5