]> gitweb.michael.orlitzky.com - spline3.git/blob - src/Face.hs
Fix the naming of the faces and convert their comments to haddock form.
[spline3.git] / src / Face.hs
1 module Face
2 where
3
4 import Cube
5 import Grid
6 import Point
7 import Tetrahedron hiding (c, cube, v0, v1, v2, v3)
8 import ThreeDimensional
9
10 data Face = Face { cube :: Cube,
11 v0 :: Point,
12 v1 :: Point,
13 v2 :: Point,
14 v3 :: Point }
15 deriving (Eq)
16
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"
22 where
23 i' = i (cube f)
24 j' = j (cube f)
25 k' = k (cube f)
26
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
31
32 -- | The top (in the direction of z) face of the cube.
33 face0 :: Cube -> Face
34 face0 c = Face c v0' v1' v2' v3'
35 where
36 g = grid c
37 delta = (1/2)*(h g)
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)
42
43 -- | The back (in the direction of x) face of the cube.
44 face1 :: Cube -> Face
45 face1 c = Face c v0' v1' v2' v3'
46 where
47 g = grid c
48 delta = (1/2)*(h g)
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)
53
54
55 -- The bottom face (in the direction of -z) of the cube.
56 face2 :: Cube -> Face
57 face2 c = Face c v0' v1' v2' v3'
58 where
59 g = grid c
60 delta = (1/2)*(h g)
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)
65
66
67 -- | The front (in the direction of -x) face of the cube.
68 face3 :: Cube -> Face
69 face3 c = Face c v0' v1' v2' v3'
70 where
71 g = grid c
72 delta = (1/2)*(h g)
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)
77
78
79 -- | The left (in the direction of -y) face of the cube.
80 face4 :: Cube -> Face
81 face4 c = Face c v0' v1' v2' v3'
82 where
83 g = grid c
84 delta = (1/2)*(h g)
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)
89
90
91 -- | The right (in the direction of y) face of the cube.
92 face5 :: Cube -> Face
93 face5 c = Face c v0' v1' v2' v3'
94 where
95 g = grid c
96 delta = (1/2)*(h g)
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)
101
102
103 tetrahedron0 :: Face -> Tetrahedron
104 tetrahedron0 f =
105 Tetrahedron c v0' v1' v2' v3'
106 where
107 c = cube f
108 v0' = v0 f
109 v1' = v1 f
110 v2' = center f
111 v3' = center c
112
113 tetrahedron1 :: Face -> Tetrahedron
114 tetrahedron1 f =
115 Tetrahedron c v0' v1' v2' v3'
116 where
117 c = cube f
118 v0' = v1 f
119 v1' = v2 f
120 v2' = center f
121 v3' = center c
122
123
124 tetrahedron2 :: Face -> Tetrahedron
125 tetrahedron2 f =
126 Tetrahedron c v0' v1' v2' v3'
127 where
128 c = cube f
129 v0' = v2 f
130 v1' = v3 f
131 v2' = center f
132 v3' = center c
133
134
135 tetrahedron3 :: Face -> Tetrahedron
136 tetrahedron3 f =
137 Tetrahedron c v0' v1' v2' v3'
138 where
139 c = cube f
140 v0' = v3 f
141 v1' = v0 f
142 v2' = center f
143 v3' = center c
144
145 tetrahedrons :: Cube -> [Tetrahedron]
146 tetrahedrons c =
147 concat [
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] ]
154 where
155 f0 = face0 c
156 f1 = face1 c
157 f2 = face2 c
158 f3 = face3 c
159 f4 = face4 c
160 f5 = face5 c