packages feed

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