mirror of
https://github.com/reanimate/reanimate.git
synced 2026-09-11 16:12:20 +00:00
Move examples into separate executables.
This commit is contained in:
parent
e7901f79bc
commit
b880296d28
6 changed files with 221 additions and 1 deletions
51
examples/boundingbox.hs
Executable file
51
examples/boundingbox.hs
Executable file
|
|
@ -0,0 +1,51 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-13.14 runghc --package reanimate
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module Main (main) where
|
||||
|
||||
import Control.Lens
|
||||
|
||||
import Graphics.SvgTree (Number(..),Tree)
|
||||
import Reanimate.Driver (reanimate)
|
||||
import Reanimate.LaTeX
|
||||
import Reanimate.Monad
|
||||
import Reanimate.Svg
|
||||
import Reanimate.Signal
|
||||
|
||||
main :: IO ()
|
||||
main = reanimate bbox
|
||||
|
||||
bbox :: Animation
|
||||
bbox = bg `sim`
|
||||
mapA (translate (-50) 0) bbox1 `sim`
|
||||
mapA (translate 50 0) bbox2
|
||||
where
|
||||
bg = mkAnimation 0 $ emit $ mkBackground "black"
|
||||
|
||||
bbox1 :: Animation
|
||||
bbox1 = mkAnimation 5 $ do
|
||||
s <- getSignal signalLinear
|
||||
emit $ mkGroup
|
||||
[ mkBoundingBox $ rotate (360*s) svg
|
||||
, withFillColor "white" $ rotate (360*s) svg ]
|
||||
where
|
||||
svg = scale 3 $ center $ latexAlign "\\sum_{k=1}^\\infty"
|
||||
|
||||
bbox2 :: Animation
|
||||
bbox2 = autoReverse $ mkAnimation 2.5 $ do
|
||||
s <- getSignal signalLinear
|
||||
emit $ mkGroup
|
||||
[ mkBoundingBox $ partialSvg s heartShape
|
||||
, withStrokeColor "white" $ withFillOpacity 0 $ partialSvg s heartShape ]
|
||||
|
||||
mkBoundingBox :: Tree -> Tree
|
||||
mkBoundingBox svg = withStrokeColor "red" $ withFillOpacity 0 $
|
||||
mkRect (Num x, Num y) (Num w) (Num h)
|
||||
where
|
||||
(x, y, w, h) = boundingBox svg
|
||||
|
||||
heartShape =
|
||||
center $ rotateAroundCenter 225 $ mkPathString
|
||||
"M0.0,40.0 v-40.0 h40.0\
|
||||
\a20.0 20.0 90.0 0 1 0.0,40.0\
|
||||
\a20.0 20.0 90.0 0 1 -40.0,0.0 Z"
|
||||
24
examples/latex_basic.hs
Executable file
24
examples/latex_basic.hs
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-13.14 runghc --package reanimate
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module Main (main) where
|
||||
|
||||
import Control.Lens
|
||||
|
||||
import Graphics.SvgTree (Number(..))
|
||||
import Reanimate.Driver (reanimate)
|
||||
import Reanimate.LaTeX
|
||||
import Reanimate.Monad
|
||||
import Reanimate.Svg
|
||||
import Reanimate.Signal
|
||||
|
||||
main :: IO ()
|
||||
main = reanimate $ autoReverse $ mkAnimation 2 $ do
|
||||
s <- getSignal signalLinear
|
||||
emit $ mkGroup
|
||||
[ mkBackground "black"
|
||||
, withStrokeColor "white" $ withFillOpacity 0 $ withStrokeWidth (Num 0.1) text
|
||||
, withFillColor "white" $ withFillOpacity s text ]
|
||||
where
|
||||
text = scale 4 $ center $ latexAlign
|
||||
"\\sum_{k=1}^\\infty {1 \\over k^2} = {\\pi^2 \\over 6}"
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-12.26 runghc --package reanimate
|
||||
-- stack --resolver lts-13.14 runghc --package reanimate
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module Main (main) where
|
||||
|
||||
|
|
|
|||
29
examples/latex_draw.hs
Executable file
29
examples/latex_draw.hs
Executable file
|
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-13.14 runghc --package reanimate
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module Main (main) where
|
||||
|
||||
import Control.Lens
|
||||
|
||||
import Graphics.SvgTree (Number(..))
|
||||
import Reanimate.Driver (reanimate)
|
||||
import Reanimate.LaTeX
|
||||
import Reanimate.Monad
|
||||
import Reanimate.Svg
|
||||
import Reanimate.Signal
|
||||
|
||||
main :: IO ()
|
||||
main = reanimate $
|
||||
bg `sim` (autoReverse $ drawText `andThen` fillText)
|
||||
where
|
||||
bg = mkAnimation 0 $ emit (mkBackground "black")
|
||||
msg = "\\sum_{k=1}^\\infty {1 \\over k^2} = {\\pi^2 \\over 6}"
|
||||
glyphs = pathify $ center $ latexAlign msg
|
||||
fillText = mkAnimation 1 $ do
|
||||
s <- getSignal signalLinear
|
||||
emit $ scale 5 $ withFillColor "white" $ withFillOpacity s glyphs
|
||||
drawText = mkAnimation 2 $ do
|
||||
s <- getSignal signalLinear
|
||||
emit $ scale 5 $
|
||||
withStrokeColor "white" $ withFillOpacity 0 $ withStrokeWidth (Num 0.1) $
|
||||
partialSvg s glyphs
|
||||
53
examples/sunflower.hs
Executable file
53
examples/sunflower.hs
Executable file
|
|
@ -0,0 +1,53 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-13.14 runghc --package reanimate
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module Main (main) where
|
||||
|
||||
import Codec.Picture.Types
|
||||
import qualified Data.Colour.Palette.BrewerSet as D
|
||||
import qualified Diagrams.Backend.SVG as D
|
||||
import Diagrams.Prelude hiding (Animation, boundingBox,
|
||||
center, circle, duration,
|
||||
fontSize, rotate, scale,
|
||||
translate)
|
||||
import qualified Diagrams.Prelude as D
|
||||
import qualified Diagrams.TwoD.Path.LSystem as D
|
||||
import Graphics.SvgTree (Number (..))
|
||||
import Graphics.SvgTree as S
|
||||
import Linear.V2
|
||||
import Reanimate.Diagrams
|
||||
import Reanimate.Driver (reanimate)
|
||||
import Reanimate.LaTeX
|
||||
import Reanimate.Monad
|
||||
import Reanimate.Signal
|
||||
import Reanimate.Svg
|
||||
|
||||
|
||||
main :: IO ()
|
||||
main = reanimate $ mkAnimation 10 $ do
|
||||
n <- getSignal $ signalFromTo 1 500 signalLinear
|
||||
rot <- getSignal $ signalFromTo 0 45 signalLinear
|
||||
emit $ mkBackground "black"
|
||||
emit $ rotate rot $ translate (-320/2) (-180/2)
|
||||
(dSvg $ round n)
|
||||
where
|
||||
cached = [ dSvg n | n <- [0..]]
|
||||
dSvg n = renderDiagram $ withEnvelope (D.rect 320 180 :: SvgDiagram) $
|
||||
D.scale 5 $ sunflower n
|
||||
|
||||
mkCoords :: [P2 Double]
|
||||
mkCoords =[coord (fromIntegral i) | i <- [1..]]
|
||||
where
|
||||
coord m = p2 $ fromPolar (sqrt m) (2.4 * m)
|
||||
fromPolar r theta = (r * cos theta, r * sin theta)
|
||||
|
||||
floret :: Double -> SvgDiagram
|
||||
floret r = D.circle 0.6 # lw none # fc (colors !! n)
|
||||
where
|
||||
n = floor (1.4 * sqrt r) `mod` 10
|
||||
colors = black : (reverse $ D.brewerSet D.YlOrBr 9)
|
||||
|
||||
sunflower :: Int -> SvgDiagram
|
||||
sunflower n = frame 4 $ position $ take n $ zip mkCoords florets
|
||||
where
|
||||
florets = [ floret (sqrt (fromIntegral i)) | i <- [1 ..]]
|
||||
63
examples/tangent_and_normal.hs
Executable file
63
examples/tangent_and_normal.hs
Executable file
|
|
@ -0,0 +1,63 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-13.14 runghc --package reanimate
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module Main (main) where
|
||||
|
||||
import Codec.Picture.Types
|
||||
import qualified Data.Colour.Palette.BrewerSet as D
|
||||
import qualified Diagrams.Backend.SVG as D
|
||||
import Diagrams.Prelude hiding (Animation, boundingBox,
|
||||
center, circle, duration,
|
||||
fontSize, rotate, scale,
|
||||
translate)
|
||||
import qualified Diagrams.Prelude as D
|
||||
import qualified Diagrams.TwoD.Path.LSystem as D
|
||||
import Graphics.SvgTree (Number (..))
|
||||
import Graphics.SvgTree as S
|
||||
import Linear.V2
|
||||
import Reanimate.Diagrams
|
||||
import Reanimate.Driver (reanimate)
|
||||
import Reanimate.LaTeX
|
||||
import Reanimate.Monad
|
||||
import Reanimate.Signal
|
||||
import Reanimate.Svg
|
||||
|
||||
|
||||
main :: IO ()
|
||||
main = reanimate $ mkAnimation 5 $ do
|
||||
s <- oscillate $ getSignal $ signalCurve 2
|
||||
emit $ mkBackground "black"
|
||||
emit $ translate (-320/2) (-180/2) $ withStrokeColor "white" $
|
||||
renderDiagram $
|
||||
withEnvelope (D.rect 320 180 :: SvgDiagram) $
|
||||
D.scale 50 $ D.translate (V2 (-2) (-0.75)) $ dia s
|
||||
where
|
||||
dia param =
|
||||
frame 0.5 $ lc white $
|
||||
mconcat
|
||||
[ lc green $ rightAngleSquare
|
||||
, tangentLine
|
||||
, baselineText "tangent" # D.translate tangentVector
|
||||
, normalLine
|
||||
, topLeftText "normal" # D.translate (-normalVector)
|
||||
] # moveTo pt # D.fontSize large
|
||||
<> strokeLocTrail spline
|
||||
where
|
||||
pts = map p2 [(0,0), (1,1), (2,1), (3,0), (3.5,0)]
|
||||
|
||||
spline :: Located (Trail V2 Double)
|
||||
spline = cubicSpline False pts
|
||||
|
||||
pt = atParam spline param
|
||||
tangentVector :: V2 Double
|
||||
tangentVector = D.normalize $ tangentAtParam spline param
|
||||
normalVector = D.normalize $ normalAtParam spline param
|
||||
|
||||
symmetricLine :: V2 Double -> SvgDiagram
|
||||
symmetricLine v = fromOffsets [2 *^ v] # D.center
|
||||
tangentLine :: SvgDiagram
|
||||
tangentLine = symmetricLine tangentVector
|
||||
normalLine = symmetricLine normalVector
|
||||
|
||||
rightAngleSquare :: SvgDiagram
|
||||
rightAngleSquare = square 0.1 # alignBL # D.rotate (signedAngleBetween tangentVector unitX)
|
||||
Loading…
Reference in a new issue