learn-physics-0.6.3: examples/src/eFieldLine3D.hs
{-# OPTIONS_GHC -Wall #-}
module Main where
import Vis
( display
, VisObject(..)
, red
, blue
, Options(..)
, defaultOpts
)
import Physics.Learn.Visual.VisTools
( curveObject
, displayVectorField
)
import Physics.Learn.Position
( Position
, cart
)
import Physics.Learn.Curve
( Curve(..)
)
import Physics.Learn.Charge
( ChargeDistribution(..)
, eField
)
curve1 :: Curve
curve1 = Curve (\t -> cart t 0 0) (-4) 4
lineCharge :: ChargeDistribution
lineCharge = LineCharge (const 1e-9) curve1
samplePoints :: [Position]
samplePoints = [cart x y z | x <- [-8,-6..8], y <- [-4,-2..4], z <- [-4,-2..4], abs y + abs z > 0.5 || abs x > 4.5]
arrows :: VisObject Double
arrows = displayVectorField blue 10 samplePoints (eField lineCharge)
drawFun :: VisObject Double
drawFun = VisObjects [curveObject red curve1, arrows]
myOptions :: Options
myOptions = defaultOpts {optWindowName = "Electric Field from a Line Charge"}
main :: IO ()
main = display myOptions drawFun