LPFP-1.0: app/VisTwoSprings.hs
{-# OPTIONS -Wall #-}
import LPFP.SimpleVec ( R, zeroV )
import LPFP.Mechanics3D ( posVec, simulateVis, v3FromVec )
import LPFP.MultipleObjects ( MultiParticleState(..) )
import LPFP.MOExamples ( twoSpringsInitial, twoSpringsUpdate )
import Vis ( VisObject(..), Flavour(..), red, green, blue )
main :: IO ()
main = simulateVis 1 20 twoSpringsInitial twoSpringsVisObject twoSpringsUpdate
twoSpringsVisObject :: MultiParticleState -> VisObject R
twoSpringsVisObject (MPS sts)
= let r0 = posVec (sts !! 0)
r1 = posVec (sts !! 1)
springsObj = Line Nothing [v3FromVec zeroV
,v3FromVec r0
,v3FromVec r1] blue
objs = [Trans (v3FromVec r0) (Sphere 0.1 Solid red)
,Trans (v3FromVec r1) (Sphere 0.1 Solid green)
,springsObj
]
vpm = 1 -- Vis units per meter
in Scale (vpm,vpm,vpm) $ VisObjects objs