packages feed

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