X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FTetrahedron.hs;fp=src%2FTetrahedron.hs;h=9a3e4950a1a984dd527e1fe034e1038b38f1ac33;hb=0696fc4f3e428d2156f0be4ca40728abf2e35abe;hp=87bfd5e8a65b8621179d480bd636a1feeed6854b;hpb=d47fe5a8e167d8bdc0b4edf2899eee351615ccf8;p=spline3.git diff --git a/src/Tetrahedron.hs b/src/Tetrahedron.hs index 87bfd5e..9a3e495 100644 --- a/src/Tetrahedron.hs +++ b/src/Tetrahedron.hs @@ -80,7 +80,7 @@ instance Show Tetrahedron where -- We just average the four vertices. barycenter :: Tetrahedron -> Point barycenter (Tetrahedron _ v0' v1' v2' v3' _) = - (v0' + v1' + v2' + v3') `scale` (1/4) + (v0' + v1' + v2' + v3') `scale` (1 / 4) @@ -160,102 +160,102 @@ c !t !i !j !k !l = coefficient :: Int -> Int -> Int -> Int -> Double coefficient 0 0 3 0 = - (1/8) * (i' + f + l' + t' + lt + fl + ft + flt) + (1 / 8) * (i' + f + l' + t' + lt + fl + ft + flt) coefficient 0 0 0 3 = - (1/8) * (i' + f + r + t' + rt + fr + ft + frt) + (1 / 8) * (i' + f + r + t' + rt + fr + ft + frt) coefficient 0 0 2 1 = - (5/24)*(i' + f + t' + ft) + (1/24)*(l' + fl + lt + flt) + (5 / 24)*(i' + f + t' + ft) + (1 / 24)*(l' + fl + lt + flt) coefficient 0 0 1 2 = - (5/24)*(i' + f + t' + ft) + (1/24)*(r + fr + rt + frt) + (5 / 24)*(i' + f + t' + ft) + (1 / 24)*(r + fr + rt + frt) coefficient 0 1 2 0 = - (5/24)*(i' + f) + (1/8)*(l' + t' + fl + ft) - + (1/24)*(lt + flt) + (5 / 24)*(i' + f) + (1 / 8)*(l' + t' + fl + ft) + + (1 / 24)*(lt + flt) coefficient 0 1 0 2 = - (5/24)*(i' + f) + (1/8)*(r + t' + fr + ft) - + (1/24)*(rt + frt) + (5 / 24)*(i' + f) + (1 / 8)*(r + t' + fr + ft) + + (1 / 24)*(rt + frt) coefficient 0 1 1 1 = - (13/48)*(i' + f) + (7/48)*(t' + ft) - + (1/32)*(l' + r + fl + fr) - + (1/96)*(lt + rt + flt + frt) + (13 / 48)*(i' + f) + (7 / 48)*(t' + ft) + + (1 / 32)*(l' + r + fl + fr) + + (1 / 96)*(lt + rt + flt + frt) coefficient 0 2 1 0 = - (13/48)*(i' + f) + (17/192)*(l' + t' + fl + ft) - + (1/96)*(lt + flt) - + (1/64)*(r + d + fr + fd) - + (1/192)*(rt + ld + frt + fld) + (13 / 48)*(i' + f) + (17 / 192)*(l' + t' + fl + ft) + + (1 / 96)*(lt + flt) + + (1 / 64)*(r + d + fr + fd) + + (1 / 192)*(rt + ld + frt + fld) coefficient 0 2 0 1 = - (13/48)*(i' + f) + (17/192)*(r + t' + fr + ft) - + (1/96)*(rt + frt) - + (1/64)*(l' + d + fl + fd) - + (1/192)*(rd + lt + flt + frd) + (13 / 48)*(i' + f) + (17 / 192)*(r + t' + fr + ft) + + (1 / 96)*(rt + frt) + + (1 / 64)*(l' + d + fl + fd) + + (1 / 192)*(rd + lt + flt + frd) coefficient 0 3 0 0 = - (13/48)*(i' + f) + (5/96)*(l' + r + t' + d + fl + fr + ft + fd) - + (1/192)*(rt + rd + lt + ld + frt + frd + flt + fld) + (13 / 48)*(i' + f) + (5 / 96)*(l' + r + t' + d + fl + fr + ft + fd) + + (1 / 192)*(rt + rd + lt + ld + frt + frd + flt + fld) coefficient 1 0 2 0 = - (1/4)*i' + (1/6)*(f + l' + t') - + (1/12)*(lt + fl + ft) + (1 / 4)*i' + (1 / 6)*(f + l' + t') + + (1 / 12)*(lt + fl + ft) coefficient 1 0 0 2 = - (1/4)*i' + (1/6)*(f + r + t') - + (1/12)*(rt + fr + ft) + (1 / 4)*i' + (1 / 6)*(f + r + t') + + (1 / 12)*(rt + fr + ft) coefficient 1 0 1 1 = - (1/3)*i' + (5/24)*(f + t') - + (1/12)*ft - + (1/24)*(l' + r) - + (1/48)*(lt + rt + fl + fr) + (1 / 3)*i' + (5 / 24)*(f + t') + + (1 / 12)*ft + + (1 / 24)*(l' + r) + + (1 / 48)*(lt + rt + fl + fr) coefficient 1 1 1 0 = - (1/3)*i' + (5/24)*f - + (1/8)*(l' + t') - + (5/96)*(fl + ft) - + (1/48)*(d + r + lt) - + (1/96)*(fd + ld + rt + fr) + (1 / 3)*i' + (5 / 24)*f + + (1 / 8)*(l' + t') + + (5 / 96)*(fl + ft) + + (1 / 48)*(d + r + lt) + + (1 / 96)*(fd + ld + rt + fr) coefficient 1 1 0 1 = - (1/3)*i' + (5/24)*f - + (1/8)*(r + t') - + (5/96)*(fr + ft) - + (1/48)*(d + l' + rt) - + (1/96)*(fd + lt + rd + fl) + (1 / 3)*i' + (5 / 24)*f + + (1 / 8)*(r + t') + + (5 / 96)*(fr + ft) + + (1 / 48)*(d + l' + rt) + + (1 / 96)*(fd + lt + rd + fl) coefficient 1 2 0 0 = - (1/3)*i' + (5/24)*f - + (7/96)*(l' + r + t' + d) - + (1/32)*(fl + fr + ft + fd) - + (1/96)*(rt + rd + lt + ld) + (1 / 3)*i' + (5 / 24)*f + + (7 / 96)*(l' + r + t' + d) + + (1 / 32)*(fl + fr + ft + fd) + + (1 / 96)*(rt + rd + lt + ld) coefficient 2 0 1 0 = - (3/8)*i' + (7/48)*(f + t' + l') - + (1/48)*(r + d + b + lt + fl + ft) - + (1/96)*(rt + bt + fr + fd + ld + bl) + (3 / 8)*i' + (7 / 48)*(f + t' + l') + + (1 / 48)*(r + d + b + lt + fl + ft) + + (1 / 96)*(rt + bt + fr + fd + ld + bl) coefficient 2 0 0 1 = - (3/8)*i' + (7/48)*(f + t' + r) - + (1/48)*(l' + d + b + rt + fr + ft) - + (1/96)*(lt + bt + fl + fd + rd + br) + (3 / 8)*i' + (7 / 48)*(f + t' + r) + + (1 / 48)*(l' + d + b + rt + fr + ft) + + (1 / 96)*(lt + bt + fl + fd + rd + br) coefficient 2 1 0 0 = - (3/8)*i' + (1/12)*(t' + r + l' + d) - + (1/64)*(ft + fr + fl + fd) - + (7/48)*f - + (1/48)*b - + (1/96)*(rt + ld + lt + rd) - + (1/192)*(bt + br + bl + bd) + (3 / 8)*i' + (1 / 12)*(t' + r + l' + d) + + (1 / 64)*(ft + fr + fl + fd) + + (7 / 48)*f + + (1 / 48)*b + + (1 / 96)*(rt + ld + lt + rd) + + (1 / 192)*(bt + br + bl + bd) coefficient 3 0 0 0 = - (3/8)*i' + (1/12)*(t' + f + l' + r + d + b) - + (1/96)*(lt + fl + ft + rt + bt + fr) - + (1/96)*(fd + ld + bd + br + rd + bl) + (3 / 8)*i' + (1 / 12)*(t' + f + l' + r + d + b) + + (1 / 96)*(lt + fl + ft + rt + bt + fr) + + (1 / 96)*(fd + ld + bd + br + rd + bl) @@ -295,7 +295,7 @@ det p0 p1 p2 p3 = {-# INLINE volume #-} volume :: Tetrahedron -> Double volume (Tetrahedron _ v0' v1' v2' v3' _) = - (1/6)*(det v0' v1' v2' v3') + (1 / 6)*(det v0' v1' v2' v3') -- | The barycentric coordinates of a point with respect to v0. {-# INLINE b0 #-} @@ -352,7 +352,7 @@ tetrahedron1_geometry_tests = volume1 :: Assertion volume1 = - assertEqual "volume is correct" True (vol ~= (-1/3)) + assertEqual "volume is correct" True (vol ~= (-1 / 3)) where vol = volume t @@ -377,7 +377,7 @@ tetrahedron2_geometry_tests = precomputed_volume = 0 } volume1 :: Assertion - volume1 = assertEqual "volume1 is correct" True (vol ~= (1/3)) + volume1 = assertEqual "volume1 is correct" True (vol ~= (1 / 3)) where vol = volume t @@ -525,7 +525,7 @@ p78_24_properties = -- | Returns the domain point of t with indices i,j,k,l. domain_point :: Tetrahedron -> Int -> Int -> Int -> Int -> Point domain_point t i j k l = - weighted_sum `scale` (1/3) + weighted_sum `scale` (1 / 3) where v0' = (v0 t) `scale` (fromIntegral i) v1' = (v1 t) `scale` (fromIntegral j) @@ -551,10 +551,10 @@ p78_24_properties = (volume t) > 0 ==> c t 2 1 0 0 ~= (term1 - term2 + term3 - term4) where - term1 = (1/3)*(p t 0 3 0 0) - term2 = (5/6)*(p t 3 0 0 0) + term1 = (1 / 3)*(p t 0 3 0 0) + term2 = (5 / 6)*(p t 3 0 0 0) term3 = 3*(p t 2 1 0 0) - term4 = (3/2)*(p t 1 2 0 0) + term4 = (3 / 2)*(p t 1 2 0 0) -- | Given in Sorokina and Zeilfelder, p. 78. prop_c1110_identity :: Tetrahedron -> Property @@ -562,10 +562,10 @@ p78_24_properties = (volume t) > 0 ==> c t 1 1 1 0 ~= (term1 + term2 - term3 - term4) where - term1 = (1/3)*((p t 3 0 0 0) + (p t 0 3 0 0) + (p t 0 0 3 0)) - term2 = (9/2)*(p t 1 1 1 0) - term3 = (3/4)*((p t 2 1 0 0) + (p t 1 2 0 0) + (p t 2 0 1 0)) - term4 = (3/4)*((p t 1 0 2 0) + (p t 0 2 1 0) + (p t 0 1 2 0)) + term1 = (1 / 3)*((p t 3 0 0 0) + (p t 0 3 0 0) + (p t 0 0 3 0)) + term2 = (9 / 2)*(p t 1 1 1 0) + term3 = (3 / 4)*((p t 2 1 0 0) + (p t 1 2 0 0) + (p t 2 0 1 0)) + term4 = (3 / 4)*((p t 1 0 2 0) + (p t 0 2 1 0) + (p t 0 1 2 0))