mars-0.2.1.0: Graphics/Mars/Example.hs
{-|
Module : Graphics.Mars.Example
Description : Provides code examples which can be studied or executed.
Copyright : (c) Christopher Howard, 2016
License : GPL-3
Maintainer : ch.howard@zoho.com
Run an example function to view an image, or study the function source code for
to see how the library can be used.
Please be aware that breaking API changes to the Example functions
will not be tracked in library version numbering. It is recommended
that you do not link to these functions from any production code.
-}
module Graphics.Mars.Example where
import Prelude(IO, (.), ($), writeFile, return, putStrLn)
import Graphics.Gloss (black)
import Data.Array.Unboxed (elems)
import Graphics.Mars.Paint
import Graphics.Mars.Graph
import Graphics.Mars.Display2D
import Graphics.Mars.Ply
-- |Generates an example random walk array and displays it as a 2-dimensional
-- intensity graph
--
-- @
-- example2D :: IO()
-- example2D = do putStrLn \"Generating the graph. This may take a minute or two.\"
-- a <- graph height width radius walkfactor
-- seed iterations scalefactor startingpoint
-- displayWindow (width, height) black \"Mars\"
-- (toImage a (lightnessInt hue (minMax (elems a))))
-- where (width, height) = (300, 300)
-- radius = 30
-- walkfactor = 30
-- seed = 54844
-- hue = 272
-- iterations = 300
-- scalefactor = 1
-- startingpoint = (0, -80)
-- @
example2D :: IO()
example2D = do putStrLn "Generating the graph. This may take a minute or two."
a <- graph height width radius walkfactor
seed iterations scalefactor startingpoint
displayWindow (width, height) black "Mars"
(toImage a (lightnessInt hue (minMax (elems a))))
where (width, height) = (300, 300)
radius = 30
walkfactor = 30
seed = 54844
hue = 272
iterations = 300
scalefactor = 1
startingpoint = (0, -80)
-- |Generates a random walk array, converts it PLY ascii format, and output the
-- PLY to a file called \"out.ply\".
--
-- @
-- examplePly :: IO ()
-- examplePly = do putStrLn \"Generating the graph. This may take a minute or two.\"
-- a <- graph height width radius walkfactor
-- seed iterations scalefactor startingpoint
-- writeFile \"out.ply\" $ (toPly . surface) a
-- putStrLn \"The file \'out.ply\' has been created in the current \\
-- \\working directory.\"
-- where (width, height) = (300, 300)
-- radius = 30
-- walkfactor = 30
-- seed = 54844
-- iterations = 300
-- scalefactor = 1
-- startingpoint = (0, -80)
-- @
examplePly :: IO ()
examplePly = do putStrLn "Generating the graph. This may take a minute or two."
a <- graph height width radius walkfactor
seed iterations scalefactor startingpoint
writeFile "out.ply" $ (toPly . surface) a
putStrLn "The file 'out.ply' has been created in the current \
\working directory."
where (width, height) = (300, 300)
radius = 30
walkfactor = 30
seed = 54844
iterations = 300
scalefactor = 1
startingpoint = (0, -80)
-- |Similar to examplePly2, but generates two graphs and merges them together.
--
-- @
-- examplePly2 :: IO ()
-- examplePly2 = do putStrLn \"Generating two graphs and merging them. This may \\
-- \\take a few minutes.\"
-- a1 <- graph height width radius walkfactor
-- seed1 iterations scalefactor startingpoint1
-- a2 <- graph height width radius walkfactor
-- seed2 iterations scalefactor startingpoint2
-- let a3 = meldGraphs a1 a2
-- let a4 = zRandomize 0.5 seed3 a3
-- writeFile \"out2.ply\" $ (toPly . surface) a4
-- putStrLn \"The file \'out2.ply\' has been created in the current \\
-- \\working directory.\"
-- where (width, height) = (300, 300)
-- radius = 30
-- walkfactor = 30
-- iterations = 200
-- scalefactor = 1
-- seed1 = 3939423948
-- startingpoint1 = (0, 0)
-- seed2 = 34209809
-- startingpoint2 = (100, 100)
-- seed3 = 87484853049
-- @
examplePly2 :: IO ()
examplePly2 = do putStrLn "Generating two graphs and merging them. This may \
\take a few minutes."
a1 <- graph height width radius walkfactor
seed1 iterations scalefactor startingpoint1
a2 <- graph height width radius walkfactor
seed2 iterations scalefactor startingpoint2
let a3 = meldGraphs a1 a2
let a4 = zRandomize 0.5 seed3 a3
writeFile "out2.ply" $ (toPly . surface) a4
putStrLn "The file 'out2.ply' has been created in the current \
\working directory."
where (width, height) = (300, 300)
radius = 30
walkfactor = 30
iterations = 200
scalefactor = 1
seed1 = 3939423948
startingpoint1 = (0, 0)
seed2 = 34209809
startingpoint2 = (100, 100)
seed3 = 87484853049