X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FTetrahedron.hs;h=bcf9a0b599b9fe36098663b71966445ac602bbb6;hb=9b9acc3fbb79d737a39a9f4def70621440933095;hp=81fe91c11772122d0643b884e4fc3aea52163a43;hpb=6fb9ab6b6068870323e996da931fc04c7710e3e4;p=spline3.git diff --git a/src/Tetrahedron.hs b/src/Tetrahedron.hs index 81fe91c..bcf9a0b 100644 --- a/src/Tetrahedron.hs +++ b/src/Tetrahedron.hs @@ -76,6 +76,11 @@ beta t i j k l b3_term = (b3 t) `fexp` l +-- | The coefficient function. c t i j k l returns the coefficient +-- c_ijkl with respect to the tetrahedron t. The definition uses +-- pattern matching to mimic the definitions given in Sorokina and +-- Zeilfelder, pp. 84-86. If incorrect indices are supplied, the +-- function will simply error. c :: Tetrahedron -> Int -> Int -> Int -> Int -> Double c t 0 0 3 0 = eval (fv t) $ (1/8) * (I + F + L + T + LT + FL + FT + FLT) @@ -197,8 +202,10 @@ c _ _ _ _ _ = error "coefficient index out of bounds" +-- | The matrix used in the tetrahedron volume calculation as given in +-- Lai & Schumaker, Definition 15.4, page 436. vol_matrix :: Tetrahedron -> Matrix Double -vol_matrix t = (4><4) $ +vol_matrix t = (4><4) [1, 1, 1, 1, x1, x2, x3, x4, y1, y2, y3, y4, @@ -217,8 +224,8 @@ vol_matrix t = (4><4) $ z3 = z_coord (v2 t) z4 = z_coord (v3 t) --- Computed using the formula from Lai & Schumaker, Definition 15.4, --- page 436. +-- | Computed using the formula from Lai & Schumaker, Definition 15.4, +-- page 436. volume :: Tetrahedron -> Double volume t | (v0 t) == (v1 t) = 0 @@ -230,21 +237,28 @@ volume t | otherwise = (1/6)*(det (vol_matrix t)) +-- | The barycentric coordinates of a point with respect to v0. b0 :: Tetrahedron -> (RealFunction Point) b0 t point = (volume inner_tetrahedron) / (volume t) where inner_tetrahedron = t { v0 = point } + +-- | The barycentric coordinates of a point with respect to v1. b1 :: Tetrahedron -> (RealFunction Point) b1 t point = (volume inner_tetrahedron) / (volume t) where inner_tetrahedron = t { v1 = point } + +-- | The barycentric coordinates of a point with respect to v2. b2 :: Tetrahedron -> (RealFunction Point) b2 t point = (volume inner_tetrahedron) / (volume t) where inner_tetrahedron = t { v2 = point } + +-- | The barycentric coordinates of a point with respect to v3. b3 :: Tetrahedron -> (RealFunction Point) b3 t point = (volume inner_tetrahedron) / (volume t) where