{-# OPTIONS_GHC -Wall #-}
module Main where
import Graphics.Gloss
import Physics.Learn.CarrotVec
import Physics.Learn.Position
import Physics.Learn.Curve
import Physics.Learn.Charge
import Physics.Learn.Visual.GlossTools
pixelsPerMeter :: Float
pixelsPerMeter = 40
pixelsPerVPM :: Float
pixelsPerVPM = 5.6
scalePoint :: Float -> Point -> Point
scalePoint m (x,y) = (m*x,m*y)
twoD :: Vec -> Point
twoD r = (realToFrac $ xComp r,realToFrac $ yComp r)
twoDp :: Position -> Point
twoDp r = (realToFrac x, realToFrac y)
where
(x,y,_) = cartesianCoordinates r
samplePoints :: [Position]
samplePoints = [cart x y 0 | x <- [-8,-6..8], y <- [-6,-4..6], abs y > 0.5 || abs x > 4.5]
curve1 :: Curve
curve1 = Curve (\t -> cart t 0 0) (-4) 4
eFields :: [(Position,Vec)]
eFields = [(r,eFieldFromLineCharge (const 1e-9) curve1 r) | r <- samplePoints]
arrows :: [Picture]
arrows = [thickArrow 5 (scalePoint pixelsPerMeter $ twoDp r)
(scalePoint pixelsPerVPM $ twoD e) | (r,e) <- eFields]
main :: IO ()
main = display (InWindow "Electric Field from a Line Charge" (680,520) (10,10)) white $
Pictures [(Color blue (Pictures arrows))
,Color orange $ Line [(-4*pixelsPerMeter,0),(4*pixelsPerMeter,0)]]