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