mars-0.1.0.0: Graphics/Mars/Walk.hs
{-# OPTIONS_HADDOCK hide #-}
{-|
Module : Graphics.Mars.Walk
Description : Produces random walk data.
Copyright : (c) Christopher Howard, 2016
License : GPL-3
Maintainer : ch.howard@zoho.com
Use the 'walk' function to generate an infinite list of random walk points.
Based on this simple algorithm:
@
step :: RandomGen g => RandomWalk g
step = do (x, y) <- get
a <- getRandomR (0, 1)
b <- getRandomR (0, 1)
c <- ask
let d = c / 2.0
put (x + a * c - d, y + b * c - d)
get
@
-}
module Graphics.Mars.Walk (walk) where
import Graphics.Mars.ReaderStateRandom
type RandomWalk g = ReaderStateRandom Float (Float, Float) g (Float, Float)
step :: RandomGen g => RandomWalk g
step = do (x, y) <- get
a <- getRandomR (0, 1)
b <- getRandomR (0, 1)
c <- ask
let d = c / 2.0
put (x + a * c - d, y + b * c - d)
get
-- |Produces an infinite lazy list of random walk points.
walk :: RandomGen g =>
Float -- ^ the jitter factor
-> (Float, Float) -- ^ first (starting) point
-> g -- ^ a random number generator
-> [(Float, Float)]
walk = evalRSR (sequence (repeat step))