{-# LANGUAGE NoMonomorphismRestriction #-}
import Diagrams.Prelude
import Diagrams.Backend.Cairo.CmdLine
import Diagrams.TwoD.Path
import qualified Data.Colour as C
d = (stroke $
circlePath 2 # alignBR # translateX (-0.5)
<> (hcat' with { sep = 0.2 } . map (vcat' with {sep = 0.2})
$ (replicate 2 (replicate 9 (reversePath $ circlePath 0.3)))) # alignBR)
# fc red
# lw 0
{-
dAngle :: Rad
dAngle = tau / 6
dHeight = 5
dWidth = 1
dRad = 1.5
dPath = pathFromTrail . close $
arc dAngle (tau - dAngle) # scale dRad
<> fromOffsets [ (0, -(1 - cos (tau/4 - getRad dAngle)) * dRad)
, (dWidth, 0)
, (0, dHeight)
, (-dWidth, 0)
]
dotMatrix d path
= mconcat [ if (isInsideWinding p path)
then circle (d / 2 - d/10) # fc red # lw 0 # moveTo p
else mempty
| x <- [ xlo, xlo + d .. xhi ]
, y <- [ ylo, ylo + d .. yhi ]
, let p = P (x,y)
]
where (xlo, xhi) = extentX path
(ylo, yhi) = extentY path
matrixAng = 1/20
d = dotMatrix 0.09 (dPath # rotateBy matrixAng) # rotateBy (-matrixAng)
-}
{-
d = mconcat . map alignBR
$ [ dBody
, rect 0.5 6.5 # fc black
]
blues = iterate (C.blend 0.1 white) blue
# take 11 # reverse
dBody = mconcat . reverse . zipWith fc blues . take 11 . iterate (rotateBy (-1/20)) . rotateBy (-1/4) $ halfC
halfC = arc 0 (1/2 :: CircleFrac)
# scale 1.8
# stroke
# lw 0
-}
i = (circle 1 === strutY 0.5 === roundedRect (2,4) 0.4)
# lw 0.05
# lc blue
# fc yellow
sierpinski 1 = polygon with { polyType = PolyRegular 3 1 }
sierpinski n = s === (s ||| s)
where s = sierpinski (n-1)
a1 = sierpinski 4
# fc black
# scale (1/2)
grid = verts # centerXY <> horiz # centerXY
where verts = hcat' with {sep=0.5} $ replicate 20 (vrule 10)
horiz = rotateBy (1/4) verts
gbkg = grid
# lc gray
# rotateBy (-1/20)
# clipBy p
# withBounds (p :: Path R2)
where p = square 5
g = (text "G" # fontSize 4 # rotateBy (-1/20)) <> gbkg
r = text "r" # fontSize 5
<> square 1 # lw 0 # scale 5
a2 = text "a" # fontSize 5
<> square 1 # lw 0 # scale 5
m = square 5.5 <>
text "m"
# fontSize 6 # italic # font "freeserif" # fc green
vs = [(5,5), (3,6), (1,5), (1,4), (3,3), (5,2), (4,0), (0,0.5)]
s = (mconcat (map (\v -> translate v (dot blue)) vs) <>
cubicSpline False (map P vs) # lw 0.20)
# scale 0.8
dot c = circle 0.4 # fc c # lw 0
logo = (hcat' with {sep = 0.5} . map alignB $ [ d, i, a1, g, r, a2, m, s ])
# centerXY
main = defaultMain (pad 1.1 logo)