misc: add more scripts

This commit is contained in:
2020-11-05 16:31:14 +01:00
parent afd306ad06
commit 6c1248e814
11 changed files with 2481 additions and 0 deletions

37
misc/Sierpinski.lhs Normal file
View File

@@ -0,0 +1,37 @@
> import Diagrams.Backend.SVG.CmdLine
> {-# LANGUAGE NoMonomorphismRestriction #-}
> import Diagrams.Prelude
#### Brent's Original Code
> -- sierpinski 1 = triangle 1
> -- sierpinski n = s
> -- ===
> -- (s ||| s) # centerX
> -- where s = sierpinski (n-1)
#### Code to change color at each level
##### (Technically this is the complement of the Sierpinski triangle)
> import Diagrams.Prelude
> import Data.Colour.Palette.BrewerSet
>
> clrs :: [Colour Double]
> clrs = brewerSet Purples 9
>
> sierpinski :: Int -> [Colour Double] -> Diagram B
> sierpinski n c = go n <> triangle (2^n) # fc (clrs !! 0) # lw none
> where
> clrs = if null c then repeat black else cycle c
> go n
> | n == 1 = t1 # fc (clrs !! 1)
> | otherwise = appends tri (zip vecs (replicate 3 sierp))
> where
> tri = scale (2 ^ (n-1)) $ t1 # fc (clrs !! (n+1))
> vecs = [unitY, (rotateBy (-1/12) unitX), (rotateBy (1/12) unit_X)]
> sierp = go (n-1)
> t1 = triangle 1 # reflectY
>
> example = sierpinski 7 clrs # lw none # center # frame 2
> main = mainWith (example :: Diagram B)