{-# OPTIONS -Wall #-}

import SimpleVec ( R, zeroV, iHat, (*^), xComp, yComp )
import Mechanics3D ( ParticleState(..) )
import MultipleObjects ( MultiParticleState(..) )
import MOExamples
import Graphics.Gnuplot.Simple

makePNG :: (Int,MultiParticleState) -> IO ()
makePNG (n,MPS sts)
    = let rs = [zeroV] ++ [posVec st | st <- sts] ++ [0.65 *^ iHat]
          xy r = (xComp r, yComp r)
          xys :: [(R,R)]
          xys = map xy rs
          threeDigitString = reverse $ take 3 $ reverse ("00" ++ show n)
          pngFilePath = "GnuplotWave" ++ threeDigitString ++ ".png"
      in plotPath [Title "Wave"
                  ,XLabel "Position (m)"
                  ,YLabel "Displacement (m)"
                  ,XRange (0,0.65)
                  ,YRange (-0.01,0.01)
                  ,PNG pngFilePath
                  ,Key Nothing
                  ] xys

main :: IO ()
main = sequence_ $ map makePNG $ zip [0..999] $
       iterate (stringUpdate 25e-6) (stringInitialOvertone 3)
