From: Michael Orlitzky Date: Fri, 6 May 2011 22:13:21 +0000 (-0400) Subject: Move a bunch of Face/Tetrahedron code into Cube. X-Git-Tag: 0.0.1~334 X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=408f4da9058366cd8047592aa96f97bcc348d329;p=spline3.git Move a bunch of Face/Tetrahedron code into Cube. --- diff --git a/src/Cube.hs b/src/Cube.hs index 23cbe4d..d873a37 100644 --- a/src/Cube.hs +++ b/src/Cube.hs @@ -1,10 +1,11 @@ module Cube where -import Face +import Cardinal +import Face (Face(Face, v0, v1, v2, v3)) import FunctionValues ---import Grid import Point +import Tetrahedron (Tetrahedron(Tetrahedron), fv) import ThreeDimensional data Cube = Cube { h :: Double, @@ -156,10 +157,10 @@ top_face :: Cube -> Face top_face c = Face v0' v1' v2' v3' where delta = (1/2)*(h c) - v0' = (center c) + (-delta, delta, delta) - v1' = (center c) + (delta, delta, delta) - v2' = (center c) + (delta, -delta, delta) - v3' = (center c) + (-delta, -delta, delta) + v0' = (center c) + (delta, delta, delta) + v1' = (center c) + (delta, -delta, delta) + v2' = (center c) + (-delta, -delta, delta) + v3' = (center c) + (-delta, delta, delta) @@ -191,9 +192,9 @@ front_face :: Cube -> Face front_face c = Face v0' v1' v2' v3' where delta = (1/2)*(h c) - v0' = (center c) + (-delta, delta, -delta) + v0' = (center c) + (-delta, -delta, delta) v1' = (center c) + (-delta, delta, delta) - v2' = (center c) + (-delta, -delta, delta) + v2' = (center c) + (-delta, delta, -delta) v3' = (center c) + (-delta, -delta, -delta) @@ -218,3 +219,112 @@ right_face c = Face v0' v1' v2' v3' v2' = (center c) + (delta, delta, delta) v3' = (center c) + (-delta, delta, delta) + + +tetrahedron0 :: Cube -> Tetrahedron +tetrahedron0 c = + Tetrahedron (Cube.fv c) v0' v1' v2' v3' + where + v0' = center c + v1' = center (front_face c) + v2' = v0 (front_face c) + v3' = v1 (front_face c) + +tetrahedron1 :: Cube -> Tetrahedron +tetrahedron1 c = + Tetrahedron fv' v0' v1' v2' v3' + where + v0' = center c + v1' = center (front_face c) + v2' = v1 (front_face c) + v3' = v2 (front_face c) + fv' = rotate (Cube.fv c) ccwx + +tetrahedron2 :: Cube -> Tetrahedron +tetrahedron2 c = + Tetrahedron fv' v0' v1' v2' v3' + where + v0' = center c + v1' = center (front_face c) + v2' = v2 (front_face c) + v3' = v3 (front_face c) + fv' = rotate (Cube.fv c) (ccwx . ccwx) + +tetrahedron3 :: Cube -> Tetrahedron +tetrahedron3 c = + Tetrahedron fv' v0' v1' v2' v3' + where + v0' = center c + v1' = center (front_face c) + v2' = v3 (front_face c) + v3' = v1 (front_face c) + fv' = rotate (Cube.fv c) cwx + +tetrahedron4 :: Cube -> Tetrahedron +tetrahedron4 c = + Tetrahedron fv' v0' v1' v2' v3' + where + v0' = center c + v1' = center (top_face c) + v2' = v0 (front_face c) + v3' = v1 (front_face c) + fv' = rotate (Cube.fv c) cwy + +tetrahedron5 :: Cube -> Tetrahedron +tetrahedron5 c = + Tetrahedron fv' v0' v1' v2' v3' + where + v0' = center c + v1' = center (top_face c) + v2' = v1 (top_face c) + v3' = v2 (top_face c) + fv' = rotate (Tetrahedron.fv (tetrahedron0 c)) ccwx + +tetrahedron6 c = + Tetrahedron fv' v0' v1' v2' v3' + where + v0' = center c + v1' = center (top_face c) + v2' = v2 (top_face c) + v3' = v3 (top_face c) + fv' = rotate (Tetrahedron.fv (tetrahedron0 c)) (ccwx . ccwx) + +tetrahedron7 c = + Tetrahedron fv' v0' v1' v2' v3' + where + v0' = center c + v1' = center (top_face c) + v2' = v3 (top_face c) + v3' = v1 (top_face c) + fv' = rotate (Tetrahedron.fv (tetrahedron0 c)) cwx + +tetrahedrons :: Cube -> [Tetrahedron] +tetrahedrons c = + [tetrahedron0 c, + tetrahedron1 c, + tetrahedron2 c, + tetrahedron3 c, + tetrahedron4 c, + tetrahedron5 c, + tetrahedron6 c, + tetrahedron7 c + -- , + -- tetrahedron8 c, + -- tetrahedron9 c, + -- tetrahedron10 c, + -- tetrahedron11 c, + -- tetrahedron12 c, + -- tetrahedron13 c, + -- tetrahedron14 c, + -- tetrahedron15 c, + -- tetrahedron16 c, + -- tetrahedron17 c, + -- tetrahedron18 c, + -- tetrahedron19 c, + -- tetrahedron20 c, + -- tetrahedron21 c, + -- tetrahedron21 c, + -- tetrahedron22 c, + -- tetrahedron23 c, + -- tetrahedron24 c + ]