From: Michael Orlitzky Date: Fri, 2 Sep 2011 02:13:04 +0000 (-0400) Subject: Speed up the Tetrahedron contains_point function by dropping the useless factor of... X-Git-Tag: 0.0.1~185 X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=c0ea15048f7c0285213e30c82b458504be10da91;p=spline3.git Speed up the Tetrahedron contains_point function by dropping the useless factor of its volume. --- diff --git a/src/Tetrahedron.hs b/src/Tetrahedron.hs index 6c13f4b..95233e0 100644 --- a/src/Tetrahedron.hs +++ b/src/Tetrahedron.hs @@ -43,10 +43,28 @@ instance Show Tetrahedron where instance ThreeDimensional Tetrahedron where center t = ((v0 t) + (v1 t) + (v2 t) + (v3 t)) `scale` (1/4) contains_point t p = - (b0 t p) `nearly_ge` 0 && - (b1 t p) `nearly_ge` 0 && - (b2 t p) `nearly_ge` 0 && - (b3 t p) `nearly_ge` 0 + b0_unscaled `nearly_ge` 0 && + b1_unscaled `nearly_ge` 0 && + b2_unscaled `nearly_ge` 0 && + b3_unscaled `nearly_ge` 0 + where + -- Drop the useless division and volume calculation that we + -- would do if we used the regular b0,..b3 functions. + b0_unscaled :: Double + b0_unscaled = volume inner_tetrahedron + where inner_tetrahedron = t { v0 = p } + + b1_unscaled :: Double + b1_unscaled = volume inner_tetrahedron + where inner_tetrahedron = t { v1 = p } + + b2_unscaled :: Double + b2_unscaled = volume inner_tetrahedron + where inner_tetrahedron = t { v2 = p } + + b3_unscaled :: Double + b3_unscaled = volume inner_tetrahedron + where inner_tetrahedron = t { v3 = p } polynomial :: Tetrahedron -> (RealFunction Point)