X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FFace.hs;h=f4bc1580882e6c8ba9050462948d794dc65a13d2;hb=0d037f5f0829d9ee7fcccc58570305623665f52e;hp=bc316a72cee9ae4eb815424b2ccbfe8705316911;hpb=6985f184b560c21139209e5cc9fd0eaf4a51715c;p=spline3.git diff --git a/src/Face.hs b/src/Face.hs index bc316a7..f4bc158 100644 --- a/src/Face.hs +++ b/src/Face.hs @@ -1,11 +1,12 @@ -- | The Face module just contains the definition of the 'Face' data -- type and its two typeclass instances. -module Face - ( Face(..) ) +-- +module Face ( + Face(..), + center ) where -import Point -import ThreeDimensional +import Point ( Point(..), scale ) data Face = Face { v0 :: !Point, v1 :: !Point, @@ -14,22 +15,17 @@ data Face = Face { v0 :: !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" + show (Face v0' v1' v2' v3') = + "Face:\n" ++ + " v0: " ++ (show v0') ++ "\n" ++ + " v1: " ++ (show v1') ++ "\n" ++ + " v2: " ++ (show v2') ++ "\n" ++ + " v3: " ++ (show v3') ++ "\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 +-- | 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)