LPFP-1.0: app/GlossWave.hs
{-# OPTIONS -Wall #-}
import LPFP.SimpleVec ( zeroV, iHat, (*^), xComp, yComp )
import LPFP.Mechanics3D ( ParticleState(..), simulateGloss )
import LPFP.MultipleObjects ( MultiParticleState(..) )
import LPFP.MOExamples
import Graphics.Gloss ( Picture(..), scale, blue )
stringPicture :: MultiParticleState -> Picture
stringPicture (MPS sts)
= let rs = [zeroV] ++ [posVec st | st <- sts] ++ [0.65 *^ iHat]
xy r = (realToFrac $ xComp r, realToFrac $ yComp r)
xys = map xy rs
ppm = 400 -- pixels per meter
in scale ppm (20*ppm) $ Color blue $ Line xys
main :: IO ()
main = let initialState = stringInitialOvertone 3
in simulateGloss 0.001 40 initialState stringPicture stringUpdate