-- 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)
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)
{-# 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 #-}
volume1 :: Assertion
volume1 =
- assertEqual "volume is correct" True (vol ~= (-1/3))
+ assertEqual "volume is correct" True (vol ~= (-1 / 3))
where
vol = volume t
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
-- | 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)
(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
(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))