summaryrefslogtreecommitdiff
path: root/02.05.hs
diff options
context:
space:
mode:
Diffstat (limited to '02.05.hs')
-rw-r--r--02.05.hs38
1 files changed, 28 insertions, 10 deletions
diff --git a/02.05.hs b/02.05.hs
index d3be4ab..57ec8f1 100644
--- a/02.05.hs
+++ b/02.05.hs
@@ -1,17 +1,24 @@
-
-import System.Random
import Control.Monad.State
import Data.List.Split (chunksOf)
+import System.Random
-import Graphics.Rendering.Chart.Easy
import Graphics.Rendering.Chart.Backend.Cairo
+import Graphics.Rendering.Chart.Easy
import Data.Colour.Names
-import Diagrams.Prelude
import Diagrams.Backend.Postscript
+import Diagrams.Prelude
randomWalk :: (RandomGen g) => Int -> Int -> State g [[Double]]
-randomWalk d n = get >>= (\g -> let (g1, g2) = split g in (put g1) >> (return $ take n $ scanl (\x y -> map (uncurry (+)) $ zip x y) (replicate d 0.0) $ chunksOf d $ randomRs (-0.5,0.5) g2))
+randomWalk d n =
+ get >>=
+ (\g ->
+ let (g1, g2) = split g
+ in (put g1) >>
+ (return $
+ take n $
+ scanl (\x y -> map (uncurry (+)) $ zip x y) (replicate d 0.0) $
+ chunksOf d $ randomRs (-0.5, 0.5) g2))
drawWalk :: [[Double]] -> Diagram B
drawWalk w = fromVertices $ (\[x, y] -> p2 (x, y)) <$> w
@@ -21,10 +28,21 @@ main = do
let (w10, g2) = runState (randomWalk 2 10) g
let (w1000, g3) = runState (randomWalk 2 1000) g2
let (w100000, g4) = runState (randomWalk 2 100000) g3
- renderDia Postscript (PostscriptOptions "02.05.01.eps" (dims2D 500 500) EPS) $ foldr1 Diagrams.Prelude.atop [lc red $ drawWalk w10, lc blue $ drawWalk w1000, lc green $ drawWalk w100000]
+ renderDia Postscript (PostscriptOptions "02.05.01.eps" (dims2D 500 500) EPS) $
+ foldr1
+ Diagrams.Prelude.atop
+ [lc red $ drawWalk w10, lc blue $ drawWalk w1000, lc green $ drawWalk w100000]
let (e1, g5) = runState (sequence $ replicate 10000 $ randomWalk 2 2) g4
let (e10, g6) = runState (sequence $ replicate 10000 $ randomWalk 2 11) g5
- renderDia Postscript (PostscriptOptions "02.05.02.eps" (dims2D 500 500) EPS) $ foldr1 Diagrams.Prelude.atop [mconcat $ map (place (lw Diagrams.Prelude.none $ fc yellow $ ((circle 0.01) :: Diagram B))) (map (\[x, y] -> p2 (x, y)) (map last e1)), mconcat $ map (place (lw Diagrams.Prelude.none $ fc black $ circle 0.01)) (map (\[x, y] -> p2 (x, y)) (map last e10))]
-
-
-
+ renderDia Postscript (PostscriptOptions "02.05.02.eps" (dims2D 500 500) EPS) $
+ foldr1
+ Diagrams.Prelude.atop
+ [ mconcat $
+ map
+ (place (lw Diagrams.Prelude.none $ fc yellow $ ((circle 0.01) :: Diagram B)))
+ (map (\[x, y] -> p2 (x, y)) (map last e1))
+ , mconcat $
+ map
+ (place (lw Diagrams.Prelude.none $ fc black $ circle 0.01))
+ (map (\[x, y] -> p2 (x, y)) (map last e10))
+ ]