module Art.Geometry where

import Control.Arrow
import Data.Tuple.Extra
import Data.Biapplicative

-- | A vector in 2d euclidian space.
type Vec = (Float, Float)

addVecs :: Vec -> Vec -> Vec
addVecs = biliftA2 (+) (+)

reflectVec :: Vec -> Vec
reflectVec = both negate

subVecs :: Vec -> Vec -> Vec
subVecs v1 v2 = addVecs v1 $ reflectVec v2

scaleVec :: Float -> Vec -> Vec
scaleVec n = both (* n)