Diagrams 0.2 release
Posted on January 31, 2009
Tagged announcement, diagrams, Heighway dragon, library, release, haskell, projects
Tagged announcement, diagrams, Heighway dragon, library, release, haskell, projects
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.