-- | The Face module just contains the definition of the 'Face' data -- type and its two typeclass instances. -- module Face ( Face(..), center ) where import Point ( Point, scale ) data Face = Face { v0 :: !Point, v1 :: !Point, v2 :: !Point, v3 :: !Point } deriving (Eq) instance Show Face where show (Face v0' v1' v2' v3') = "Face:\n" ++ " v0: " ++ (show v0') ++ "\n" ++ " v1: " ++ (show v1') ++ "\n" ++ " v2: " ++ (show v2') ++ "\n" ++ " v3: " ++ (show v3') ++ "\n" -- | Returns the center of the given face. Since a face is just -- square, we can average the four vertices to find its center. This -- is useful because the center of a face is always a vertex of a -- tetrahedron. center :: Face -> Point center (Face v0' v1' v2' v3') = (v0' + v1' + v2' + v3') `scale` (1/4)