-- | The Face module just contains the definition of the 'Face' data -- type and its two typeclass instances. module Face ( Face(..) ) where import Point import ThreeDimensional data Face = Face { v0 :: Point, v1 :: Point, v2 :: Point, v3 :: Point } deriving (Eq) instance Show Face where show f = "Face:\n" ++ " v0: " ++ (show (v0 f)) ++ "\n" ++ " v1: " ++ (show (v1 f)) ++ "\n" ++ " v2: " ++ (show (v2 f)) ++ "\n" ++ " v3: " ++ (show (v3 f)) ++ "\n" -- | The 'Face' type is an instance of 'ThreeDimensional' so that we -- can call the 'center' function on it. This is useful because the -- center of a face is always a vertex of a tetrahedron. instance ThreeDimensional Face where -- | Since a face is square, we can just average the four vertices -- to find the center. center f = ((v0 f) + (v1 f) + (v2 f) + (v3 f)) `scale` (1/4) -- | It's possible to implement this, but it hasn't been done -- yet. A face will contain a point if the point lies in the same -- plane as the vertices of the face, and if it falls on the -- correct side of the four sides of the face. contains_point _ _ = False