data Point = Point Double Double Double deriving (Eq, Show) mkPoint :: Double -> Double -> Double -> Point mkPoint = Point instance Num Point where (Point x y z) + (Point x' y' z') = Point (x+x') (y+y') (z+z') (Point x y z) - (Point x' y' z') = Point (x-x') (y-y') (z-z') times :: Point -> Double -> Point times (Point x y z) d = Point (x*d) (y*d) (z*d) mapPointToNormalized2D :: Double -> Double -> Double -> Point -> (Double,Double) mapPointToNormalized2D xO yO zO (Point x y z) = ((zO * x / (z + zO)) + xO,(zO * y / (z + zO)) + yO)