packages feed

circle-packing-0.1.0.2: diagrams-demo.hs

import Diagrams.Prelude
import Diagrams.Backend.SVG.CmdLine
import Diagrams.Core.Envelope

import Optimisation.CirclePacking

colorize = zipWith fc $
    cycle [red,blue,yellow,magenta,cyan,bisque,firebrick,indigo]

objects = colorize $
    [ circle r  | r <- [0.1,0.2..1.6] ] ++
    [ hexagon r | r <- [0.1,0.2..0.7] ] ++
    [ decagon r | r <- [0.1,0.2..0.7] ]

-- Just a approximation, diagram objects do not have an exact radius
radiusApproximation :: Diagram b R2 -> Double
radiusApproximation o = maximum [ envelopeS (e (CircleFrac alpha)) o | alpha <- [0,0.1..1.0]]

main = defaultMain $
    position $ map (\(o,(x,y)) -> (p2 (x,y),o)) $
    packCircles radiusApproximation objects