module Drasil.Projectile.Derivations (
timeDeriv,
landPosDeriv,
rectVelDeriv,
rectPosDeriv
) where
import Prelude hiding (cos, sin)
import Language.Drasil (eqSymb, LiteralC(..), ModelExprC(..), ExprC(..),
ModelExpr, square, half)
import qualified Data.Drasil.Quantities.Physics as QP (iSpeed, constAccel)
import Data.Drasil.Quantities.Physics (gravitationalAccelConst, iPos, ixVel, iyVel, scalarPos, speed, time, xPos, yPos)
import Drasil.Projectile.Unitals (launAngle, launSpeed, landPos, flightDur)
timeDeriv :: [ModelExpr]
timeDeriv :: [ModelExpr]
timeDeriv = [ModelExpr
timeDerivEqn1, ModelExpr
timeDerivEqn2, ModelExpr
timeDerivEqn3, ModelExpr
timeDerivEqn4]
timeDerivEqn1, timeDerivEqn2, timeDerivEqn3, timeDerivEqn4 :: ModelExpr
timeDerivEqn1 :: ModelExpr
timeDerivEqn1 = DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
yPos ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$= (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
iyVel ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
time) ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$- ModelExpr -> ModelExpr
forall r. (ExprC r, LiteralC r) => r -> r
half (ConstQDef -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstQDef
gravitationalAccelConst ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* ModelExpr -> ModelExpr
forall r. (ExprC r, LiteralC r) => r -> r
square (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
time))
timeDerivEqn2 :: ModelExpr
timeDerivEqn2 = (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
iyVel ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* ConstrConcept -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstrConcept
flightDur) ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$- ModelExpr -> ModelExpr
forall r. (ExprC r, LiteralC r) => r -> r
half (ConstQDef -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstQDef
gravitationalAccelConst ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* ModelExpr -> ModelExpr
forall r. (ExprC r, LiteralC r) => r -> r
square (ConstrConcept -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstrConcept
flightDur)) ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$= Integer -> ModelExpr
forall r. LiteralC r => Integer -> r
exactDbl Integer
0
timeDerivEqn3 :: ModelExpr
timeDerivEqn3 = DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
iyVel ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$- ModelExpr -> ModelExpr
forall r. (ExprC r, LiteralC r) => r -> r
half (ConstQDef -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstQDef
gravitationalAccelConst ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* ConstrConcept -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstrConcept
flightDur) ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$= Integer -> ModelExpr
forall r. LiteralC r => Integer -> r
exactDbl Integer
0
timeDerivEqn4 :: ModelExpr
timeDerivEqn4 = ConstrConcept -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstrConcept
flightDur ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$= Integer -> ModelExpr
forall r. LiteralC r => Integer -> r
exactDbl Integer
2 ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
iyVel ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$/ ConstQDef -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstQDef
gravitationalAccelConst
landPosDeriv :: [ModelExpr]
landPosDeriv :: [ModelExpr]
landPosDeriv = [ModelExpr
landPosDerivEqn1, ModelExpr
landPosDerivEqn2, ModelExpr
landPosDerivEqn3]
landPosDerivEqn1, landPosDerivEqn2, landPosDerivEqn3 :: ModelExpr
landPosDerivEqn1 :: ModelExpr
landPosDerivEqn1 = DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
xPos ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$= DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
ixVel ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
time
landPosDerivEqn2 :: ModelExpr
landPosDerivEqn2 = ConstrConcept -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstrConcept
landPos ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$= DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
ixVel ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* Integer -> ModelExpr
forall r. LiteralC r => Integer -> r
exactDbl Integer
2 ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* ConstrConcept -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstrConcept
launSpeed ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* ModelExpr -> ModelExpr
forall r. ExprC r => r -> r
sin (ConstrConcept -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstrConcept
launAngle) ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$/ ConstQDef -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstQDef
gravitationalAccelConst
landPosDerivEqn3 :: ModelExpr
landPosDerivEqn3 = ConstrConcept -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstrConcept
landPos ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$= ConstrConcept -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstrConcept
launSpeed ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* ModelExpr -> ModelExpr
forall r. ExprC r => r -> r
cos (ConstrConcept -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstrConcept
launAngle) ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* Integer -> ModelExpr
forall r. LiteralC r => Integer -> r
exactDbl Integer
2 ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* ConstrConcept -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstrConcept
launSpeed ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* ModelExpr -> ModelExpr
forall r. ExprC r => r -> r
sin (ConstrConcept -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstrConcept
launAngle) ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$/ ConstQDef -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy ConstQDef
gravitationalAccelConst
rectVelDeriv :: [ModelExpr]
rectVelDeriv :: [ModelExpr]
rectVelDeriv = [ModelExpr
rectVelDerivEqn1, ModelExpr
rectVelDerivEqn2]
rectVelDerivEqn1, rectVelDerivEqn2 :: ModelExpr
rectVelDerivEqn1 :: ModelExpr
rectVelDerivEqn1 = DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
QP.constAccel ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$= ModelExpr -> DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => ModelExpr -> c -> ModelExpr
forall r c. (ModelExprC r, IsChunk c, HasSymbol c) => r -> c -> r
deriv (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
speed) DefinedQuantityDict
time
rectVelDerivEqn2 :: ModelExpr
rectVelDerivEqn2 = Symbol -> ModelExpr -> ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => Symbol -> r -> r -> r -> r
defint (DefinedQuantityDict -> Symbol
forall q. HasSymbol q => q -> Symbol
eqSymb DefinedQuantityDict
speed) (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
QP.iSpeed) (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
speed) (Integer -> ModelExpr
forall r. LiteralC r => Integer -> r
exactDbl Integer
1) ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$=
Symbol -> ModelExpr -> ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => Symbol -> r -> r -> r -> r
defint (DefinedQuantityDict -> Symbol
forall q. HasSymbol q => q -> Symbol
eqSymb DefinedQuantityDict
time) (Integer -> ModelExpr
forall r. LiteralC r => Integer -> r
exactDbl Integer
0) (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
time) (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
QP.constAccel)
rectPosDeriv :: [ModelExpr]
rectPosDeriv :: [ModelExpr]
rectPosDeriv = [ModelExpr
rectPosDerivEqn1, ModelExpr
rectPosDerivEqn2, ModelExpr
rectPosDerivEqn3]
rectPosDerivEqn1, rectPosDerivEqn2, rectPosDerivEqn3 :: ModelExpr
rectPosDerivEqn1 :: ModelExpr
rectPosDerivEqn1 = DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
speed ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$= ModelExpr -> DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => ModelExpr -> c -> ModelExpr
forall r c. (ModelExprC r, IsChunk c, HasSymbol c) => r -> c -> r
deriv (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
scalarPos) DefinedQuantityDict
time
rectPosDerivEqn2 :: ModelExpr
rectPosDerivEqn2 = Symbol -> ModelExpr -> ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => Symbol -> r -> r -> r -> r
defint (DefinedQuantityDict -> Symbol
forall q. HasSymbol q => q -> Symbol
eqSymb DefinedQuantityDict
scalarPos) (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
iPos) (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
scalarPos) (Integer -> ModelExpr
forall r. LiteralC r => Integer -> r
exactDbl Integer
1) ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$=
Symbol -> ModelExpr -> ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => Symbol -> r -> r -> r -> r
defint (DefinedQuantityDict -> Symbol
forall q. HasSymbol q => q -> Symbol
eqSymb DefinedQuantityDict
time) (Integer -> ModelExpr
forall r. LiteralC r => Integer -> r
exactDbl Integer
0) (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
time) (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
speed)
rectPosDerivEqn3 :: ModelExpr
rectPosDerivEqn3 = Symbol -> ModelExpr -> ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => Symbol -> r -> r -> r -> r
defint (DefinedQuantityDict -> Symbol
forall q. HasSymbol q => q -> Symbol
eqSymb DefinedQuantityDict
scalarPos) (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
iPos) (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
scalarPos) (Integer -> ModelExpr
forall r. LiteralC r => Integer -> r
exactDbl Integer
1) ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$=
Symbol -> ModelExpr -> ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => Symbol -> r -> r -> r -> r
defint (DefinedQuantityDict -> Symbol
forall q. HasSymbol q => q -> Symbol
eqSymb DefinedQuantityDict
time) (Integer -> ModelExpr
forall r. LiteralC r => Integer -> r
exactDbl Integer
0) (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
time) (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
QP.iSpeed ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$+ (DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
QP.constAccel ModelExpr -> ModelExpr -> ModelExpr
forall r. ExprC r => r -> r -> r
$* DefinedQuantityDict -> ModelExpr
forall c. (IsChunk c, HasSymbol c) => c -> ModelExpr
forall r c. (ExprC r, IsChunk c, HasSymbol c) => c -> r
sy DefinedQuantityDict
time))