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