7 import Tetrahedron hiding (c, cube, v0, v1, v2, v3)
8 import ThreeDimensional
10 data Face = Face { cube :: Cube,
17 instance Show Face where
18 show f = "Face (Cube_" ++ (show i') ++ "," ++ (show j') ++ "," ++
19 (show k') ++ ") " ++ "(v0: " ++ (show (v0 f)) ++ ") (v1: " ++
20 (show (v1 f)) ++ ") (v2: " ++ (show (v2 f)) ++ ") (v3: " ++
21 (show (v3 f)) ++ ")\n\n"
27 instance ThreeDimensional Face where
28 center f = ((v0 f) + (v1 f) + (v2 f) + (v3 f)) `scale` (1/4)
29 -- Too lazy to implement this right now.
30 contains_point _ _ = False
32 -- | The top (in the direction of z) face of the cube.
34 face0 c = Face c v0' v1' v2' v3'
38 v0' = (center c) + (-delta, delta, delta)
39 v1' = (center c) + (delta, delta, delta)
40 v2' = (center c) + (delta, -delta, delta)
41 v3' = (center c) + (-delta, -delta, delta)
43 -- | The back (in the direction of x) face of the cube.
45 face1 c = Face c v0' v1' v2' v3'
49 v0' = (center c) + (delta, delta, delta)
50 v1' = (center c) + (delta, delta, -delta)
51 v2' = (center c) + (delta, -delta, -delta)
52 v3' = (center c) + (delta, -delta, delta)
55 -- The bottom face (in the direction of -z) of the cube.
57 face2 c = Face c v0' v1' v2' v3'
61 v0' = (center c) + (delta, delta, -delta)
62 v1' = (center c) + (-delta, delta, -delta)
63 v2' = (center c) + (-delta, -delta, -delta)
64 v3' = (center c) + (delta, -delta, -delta)
67 -- | The front (in the direction of -x) face of the cube.
69 face3 c = Face c v0' v1' v2' v3'
73 v0' = (center c) + (-delta, delta, -delta)
74 v1' = (center c) + (-delta, delta, delta)
75 v2' = (center c) + (-delta, -delta, delta)
76 v3' = (center c) + (-delta, -delta, -delta)
79 -- | The left (in the direction of -y) face of the cube.
81 face4 c = Face c v0' v1' v2' v3'
85 v0' = (center c) + (-delta, -delta, delta)
86 v1' = (center c) + (delta, -delta, delta)
87 v2' = (center c) + (delta, -delta, -delta)
88 v3' = (center c) + (-delta, -delta, -delta)
91 -- | The right (in the direction of y) face of the cube.
93 face5 c = Face c v0' v1' v2' v3'
97 v0' = (center c) + (-delta, delta, -delta)
98 v1' = (center c) + (delta, delta, -delta)
99 v2' = (center c) + (delta, delta, delta)
100 v3' = (center c) + (-delta, delta, delta)
103 tetrahedron0 :: Face -> Tetrahedron
105 Tetrahedron c v0' v1' v2' v3'
113 tetrahedron1 :: Face -> Tetrahedron
115 Tetrahedron c v0' v1' v2' v3'
124 tetrahedron2 :: Face -> Tetrahedron
126 Tetrahedron c v0' v1' v2' v3'
135 tetrahedron3 :: Face -> Tetrahedron
137 Tetrahedron c v0' v1' v2' v3'
145 tetrahedrons :: Cube -> [Tetrahedron]
148 [tetrahedron0 f0, tetrahedron1 f0, tetrahedron2 f0, tetrahedron3 f0],
149 [tetrahedron0 f1, tetrahedron1 f1, tetrahedron2 f1, tetrahedron3 f2],
150 [tetrahedron0 f2, tetrahedron1 f2, tetrahedron2 f2, tetrahedron3 f2],
151 [tetrahedron0 f3, tetrahedron1 f3, tetrahedron2 f3, tetrahedron3 f3],
152 [tetrahedron0 f4, tetrahedron1 f4, tetrahedron2 f4, tetrahedron3 f4],
153 [tetrahedron0 f5, tetrahedron1 f5, tetrahedron2 f5, tetrahedron3 f5] ]