packages feed

topkata-0.0: Vector.hs

module Vector where

data V3 a = V3 a a a deriving (Show,  Eq)

normalize :: Floating a => V3 a -> V3 a
normalize (V3 x y z) =
      V3 (x/d) (y/d) (z/d)
   where d = sqrt (x*x+y*y+z*z)

prod (V3 x1 y1 z1) (V3 x2 y2 z2) =
     V3 (y1 * z2 - z1 * y2)
        (z1 * x2 - x1 * z2)
        (x1 * y2 - y1 * x2)

xmove (V3 x y z) incr = V3 (x+incr) y z
ymove (V3 x y z) incr = V3 x (y+incr) z
zmove (V3 x y z) incr = V3 x y (z+incr)

xpart (V3 x _ _) = x
ypart (V3 _ y _) = y
zpart (V3 _ _ z) = z

instance Num a => Num (V3 a) where
    (V3 x1 y1 z1) + (V3 x2 y2 z2) = V3 (x1 + x2) (y1 + y2) (z1 + z2)
    (V3 x1 y1 z1) * (V3 x2 y2 z2) =
      V3 (y1 * z2 - z1 * y2)
         (z1 * x2 - x1 * z2)
         (x1 * y2 - y1 * x2)
    (V3 x1 y1 z1) - (V3 x2 y2 z2) = V3 (x1 - x2) (y1 - y2) (z1 - z2)
    negate (V3 x y z) = V3 (-x) (-y) (-z)

    -- dummy definitions
    abs v = v
    signum (V3 0 0 0) = 0
    signum _          = 1