I… occasionally just start producing random shapes, colors and transformations or combinations of them, using the diagrams library through the very handy diagrams-pandoc Pandoc filter, like here.
colors = [yellow, pink, violet, blue, white]
fstar k = mconcat
[ let rest = if k == 0 then circle 0.1 else scale 0.3 (fstar (k-1))
in (rest ||| (hrule 1 # lc (colors !! max 0 (k-1))) ||| rest) # rotateBy (fromIntegral j/n) # translateX 2
| j <- [0..(n-1)]
]
where n = 3
fstars = vcat [ fstar i | i <- [1..4] ]
example = mconcat
[ mconcat
[ fstars # rotateBy (fromIntegral j/m)
| j <- [0..(m-1)]
] # rotateBy (fromIntegral k/p)
| k <- [0..(p-1)]
] # bg black
where m = 3
p = 5sinPlot = strokeP $ fromVertices
[ p2 (x, sin x)
| x <- [-2*pi, -2*pi+0.01 .. 2*pi]
]
col1 = darkblue
col2 = red
arm = (translateX 5 $ hrule 10 # lc col1) ||| (sinPlot # lc col2)
grid (a:(b:(c:(d:xs)))) = hcat [a,b,c,d] === grid xs
grid xs = hcat xs
example = return $ grid $
[ mconcat [ arm # rotateBy (fromIntegral j/fromIntegral n) | j <- [0..(n-1)] ]
| n <- [3, 5 .. 25]
]sinPlot = strokeP $ fromVertices
[ p2 (x, sin x)
| x <- [-2*pi, -2*pi+0.01 .. 2*pi]
]
col1 = darkblue
col2 = red
arm = (translateX 5 $ hrule 10 # lc col1) ||| (sinPlot # lc col2)
arm2 = hcat [ mconcat [ arm # rotateBy (fromIntegral j/fromIntegral n) | j <- [0..(n-1)] ]
| n <- [3, 5 .. 15]
]
example = return $ mconcat
[ arm2 # rotateBy (fromIntegral j/fromIntegral n) | j <- [0..(n-1)]
] where n = 13Posted: