Diagrams 0.2 release
After meaning to get around to it for quite a while, I’ve finally released version 0.2 of the Haskell diagrams library. Here’s the release announcement. And here’s one of my favorite examples showing off the new path support:
[caption id=“attachment_120” align=“aligncenter” width=“300” caption=“Heighway dragon”][/caption]
I made this Heighway dragon curve in just a few minutes of hacking this afternoon, with the following code:
{- Heighway dragon. See http://en.wikipedia.org/wiki/Dragon_curve. -} module Main where import Graphics.Rendering.Diagrams import Control.Monad.State import Data.Maybe dragonStr :: Int -> String dragonStr 0 = "FX" dragonStr n = concatMap rules $ dragonStr (n-1) where rules 'X' = "X+YF+" rules 'Y' = "-FX-Y" rules c = [c] strToPath :: String -> Path strToPath s = pathFromVectors . catMaybes $ evalState c (0,-1) where c = mapM exec s exec 'F' = Just `fmap` get exec '-' = modify left >> return Nothing exec '+' = modify right >> return Nothing exec _ = return Nothing left (x,y) = (-y,x) right (x,y) = (y,-x) dragon :: Int -> Diagram dragon = lc red . curved 0.8 . strToPath . dragonStr main = renderAs PNG "dragon.png" (Width 300) (dragon 12)
A special thank you to Dougal Stanton for adding text rendering support and other features, switching diagrams over to Russell O’Connor’s colour library, and generally helping out with this release.