X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FCube.hs;h=3c82f67e285f611ba64a11092d61c86cc890724a;hb=edd0bfa30456c0f609418e730af641835b8650aa;hp=1c654ffd72763010bbb56352022160f61a0257c6;hpb=e725cfe579b9d05ac040efc08f1ad47e5060de38;p=spline3.git diff --git a/src/Cube.hs b/src/Cube.hs index 1c654ff..3c82f67 100644 --- a/src/Cube.hs +++ b/src/Cube.hs @@ -27,7 +27,7 @@ import Comparisons ((~=), (~~=)) import qualified Face (Face(Face, v0, v1, v2, v3)) import FunctionValues (FunctionValues, eval, rotate) import Misc (all_equal, disjoint) -import Point +import Point (Point(..), dot) import Tetrahedron (Tetrahedron(..), c, volume) import ThreeDimensional @@ -125,7 +125,7 @@ zmax cube = (k' + 1/2)*delta instance ThreeDimensional Cube where -- | The center of Cube_ijk coincides with v_ijk at -- (ih, jh, kh). See Sorokina and Zeilfelder, p. 76. - center cube = (x, y, z) + center cube = Point x y z where delta = h cube i' = fromIntegral (i cube) :: Double @@ -137,7 +137,7 @@ instance ThreeDimensional Cube where -- | It's easy to tell if a point is within a cube; just make sure -- that it falls on the proper side of each of the cube's faces. - contains_point cube (x, y, z) + contains_point cube (Point x y z) | x < (xmin cube) = False | x > (xmax cube) = False | y < (ymin cube) = False @@ -156,10 +156,10 @@ top_face cube = Face.Face v0' v1' v2' v3' where delta = (1/2)*(h cube) cc = center cube - v0' = cc + (delta, -delta, delta) - v1' = cc + (delta, delta, delta) - v2' = cc + (-delta, delta, delta) - v3' = cc + (-delta, -delta, delta) + v0' = cc + ( Point delta (-delta) delta ) + v1' = cc + ( Point delta delta delta ) + v2' = cc + ( Point (-delta) delta delta ) + v3' = cc + ( Point (-delta) (-delta) delta ) @@ -169,10 +169,10 @@ back_face cube = Face.Face v0' v1' v2' v3' where delta = (1/2)*(h cube) cc = center cube - v0' = cc + (delta, -delta, -delta) - v1' = cc + (delta, delta, -delta) - v2' = cc + (delta, delta, delta) - v3' = cc + (delta, -delta, delta) + v0' = cc + ( Point delta (-delta) (-delta) ) + v1' = cc + ( Point delta delta (-delta) ) + v2' = cc + ( Point delta delta delta ) + v3' = cc + ( Point delta (-delta) delta ) -- The bottom face (in the direction of -z) of the cube. @@ -181,10 +181,10 @@ down_face cube = Face.Face v0' v1' v2' v3' where delta = (1/2)*(h cube) cc = center cube - v0' = cc + (-delta, -delta, -delta) - v1' = cc + (-delta, delta, -delta) - v2' = cc + (delta, delta, -delta) - v3' = cc + (delta, -delta, -delta) + v0' = cc + ( Point (-delta) (-delta) (-delta) ) + v1' = cc + ( Point (-delta) delta (-delta) ) + v2' = cc + ( Point delta delta (-delta) ) + v3' = cc + ( Point delta (-delta) (-delta) ) @@ -194,10 +194,10 @@ front_face cube = Face.Face v0' v1' v2' v3' where delta = (1/2)*(h cube) cc = center cube - v0' = cc + (-delta, -delta, delta) - v1' = cc + (-delta, delta, delta) - v2' = cc + (-delta, delta, -delta) - v3' = cc + (-delta, -delta, -delta) + v0' = cc + ( Point (-delta) (-delta) delta ) + v1' = cc + ( Point (-delta) delta delta ) + v2' = cc + ( Point (-delta) delta (-delta) ) + v3' = cc + ( Point (-delta) (-delta) (-delta) ) -- | The left (in the direction of -y) face of the cube. left_face :: Cube -> Face.Face @@ -205,10 +205,10 @@ left_face cube = Face.Face v0' v1' v2' v3' where delta = (1/2)*(h cube) cc = center cube - v0' = cc + (delta, -delta, delta) - v1' = cc + (-delta, -delta, delta) - v2' = cc + (-delta, -delta, -delta) - v3' = cc + (delta, -delta, -delta) + v0' = cc + ( Point delta (-delta) delta ) + v1' = cc + ( Point (-delta) (-delta) delta ) + v2' = cc + ( Point (-delta) (-delta) (-delta) ) + v3' = cc + ( Point delta (-delta) (-delta) ) -- | The right (in the direction of y) face of the cube. @@ -217,10 +217,10 @@ right_face cube = Face.Face v0' v1' v2' v3' where delta = (1/2)*(h cube) cc = center cube - v0' = cc + (-delta, delta, delta) - v1' = cc + (delta, delta, delta) - v2' = cc + (delta, delta, -delta) - v3' = cc + (-delta, delta, -delta) + v0' = cc + ( Point (-delta) delta delta) + v1' = cc + ( Point delta delta delta ) + v2' = cc + ( Point delta delta (-delta) ) + v3' = cc + ( Point (-delta) delta (-delta) ) tetrahedron :: Cube -> Int -> Tetrahedron @@ -588,14 +588,14 @@ back_right_down_tetrahedra cube = (tetrahedron cube 18) in_top_half :: Cube -> Point -> Bool -in_top_half cube (_,_,z) = +in_top_half cube (Point _ _ z) = distance_from_top <= distance_from_bottom where distance_from_top = abs $ (zmax cube) - z distance_from_bottom = abs $ (zmin cube) - z in_front_half :: Cube -> Point -> Bool -in_front_half cube (x,_,_) = +in_front_half cube (Point x _ _) = distance_from_front <= distance_from_back where distance_from_front = abs $ (xmin cube) - x @@ -603,7 +603,7 @@ in_front_half cube (x,_,_) = in_left_half :: Cube -> Point -> Bool -in_left_half cube (_,y,_) = +in_left_half cube (Point _ y _) = distance_from_left <= distance_from_right where distance_from_left = abs $ (ymin cube) - y