diagrams-contrib-1.0.0.1: Collection of user contributions to diagrams EDSL

Maintainer mail@joachim-breitner.de None

Diagrams.TwoD.Layout.CirclePacking

Description

A method for laying out diagrams using a circle packing algorithm. For details on the algorithm, see Optimisation.CirclePacking in the module circle-packing.

Here is an example:

``` import Optimisation.CirclePacking
import Diagrams.TwoD.Vector       (e)

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 o = maximum [ radius (e (alpha :: Turn)) o | alpha <- [0,0.1..1.0]]

circlePackingExample =
position \$ map (\(o,(x,y)) -> (p2 (x,y),o)) \$
```

Synopsis

# Documentation

renderCirclePacking :: Monoid' m => RadiusFunction b m -> [QDiagram b R2 m] -> QDiagram b R2 mSource

Combines the passed objects, whose radius is estimated using the given `RadiusFunction`, so that they do not overlap (according to the radius function) and otherwise form, as far as possible, a tight circle.

createCirclePacking :: Monoid' m => (a -> Double) -> (a -> QDiagram b R2 m) -> [a] -> QDiagram b R2 mSource

More general version of `renderCirclePacking`. You can use this if you have more information available in the values of type `a` that allows you to calculate the radius better (or even exactly).

type RadiusFunction b m = QDiagram b R2 m -> DoubleSource

The type of radius-estimating functions for Diagrams such as `approxRadius` and `circleRadius`. When you can calculate the radius better, but not any more once you converted your data to a diagram, use `createCirclePacking`.