{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE Safe #-}
module Physics.Learn.SimpleVec
( Vec
, R
, xComp
, yComp
, zComp
, vec
, (^+^)
, (^-^)
, (*^)
, (^*)
, (^/)
, (<.>)
, (><)
, magnitude
, zeroV
, negateV
, sumV
, iHat
, jHat
, kHat
)
where
import Physics.Learn.CommonVec
( Vec(..)
, R
, vec
, iHat
, jHat
, kHat
, (><)
)
infixl 6 ^+^
infixl 6 ^-^
infixl 7 *^
infixl 7 ^*
infixl 7 ^/
infixl 7 <.>
zeroV :: Vec
zeroV :: Vec
zeroV = R -> R -> R -> Vec
vec R
0 R
0 R
0
negateV :: Vec -> Vec
negateV :: Vec -> Vec
negateV (Vec R
ax R
ay R
az) = R -> R -> R -> Vec
Vec (-R
ax) (-R
ay) (-R
az)
sumV :: [Vec] -> Vec
sumV :: [Vec] -> Vec
sumV = forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr Vec -> Vec -> Vec
(^+^) Vec
zeroV
(^+^) :: Vec -> Vec -> Vec
Vec R
ax R
ay R
az ^+^ :: Vec -> Vec -> Vec
^+^ Vec R
bx R
by R
bz
= R -> R -> R -> Vec
Vec (R
axforall a. Num a => a -> a -> a
+R
bx) (R
ayforall a. Num a => a -> a -> a
+R
by) (R
azforall a. Num a => a -> a -> a
+R
bz)
(^-^) :: Vec -> Vec -> Vec
Vec R
ax R
ay R
az ^-^ :: Vec -> Vec -> Vec
^-^ Vec R
bx R
by R
bz = R -> R -> R -> Vec
Vec (R
axforall a. Num a => a -> a -> a
-R
bx) (R
ayforall a. Num a => a -> a -> a
-R
by) (R
azforall a. Num a => a -> a -> a
-R
bz)
(*^) :: R -> Vec -> Vec
R
c *^ :: R -> Vec -> Vec
*^ Vec R
ax R
ay R
az = R -> R -> R -> Vec
Vec (R
cforall a. Num a => a -> a -> a
*R
ax) (R
cforall a. Num a => a -> a -> a
*R
ay) (R
cforall a. Num a => a -> a -> a
*R
az)
(^*) :: Vec -> R -> Vec
Vec R
ax R
ay R
az ^* :: Vec -> R -> Vec
^* R
c = R -> R -> R -> Vec
Vec (R
cforall a. Num a => a -> a -> a
*R
ax) (R
cforall a. Num a => a -> a -> a
*R
ay) (R
cforall a. Num a => a -> a -> a
*R
az)
(^/) :: Vec -> R -> Vec
Vec R
ax R
ay R
az ^/ :: Vec -> R -> Vec
^/ R
c = R -> R -> R -> Vec
Vec (R
axforall a. Fractional a => a -> a -> a
/R
c) (R
ayforall a. Fractional a => a -> a -> a
/R
c) (R
azforall a. Fractional a => a -> a -> a
/R
c)
(<.>) :: Vec -> Vec -> R
Vec R
ax R
ay R
az <.> :: Vec -> Vec -> R
<.> Vec R
bx R
by R
bz = R
axforall a. Num a => a -> a -> a
*R
bx forall a. Num a => a -> a -> a
+ R
ayforall a. Num a => a -> a -> a
*R
by forall a. Num a => a -> a -> a
+ R
azforall a. Num a => a -> a -> a
*R
bz
magnitude :: Vec -> R
magnitude :: Vec -> R
magnitude Vec
v = forall a. Floating a => a -> a
sqrt(Vec
v Vec -> Vec -> R
<.> Vec
v)