Go to the documentation of this file.00001 #ifndef OPENTISSUE_CORE_MATH_MATH_TRILLINEAR_H
00002 #define OPENTISSUE_CORE_MATH_MATH_TRILLINEAR_H
00003
00004
00005
00006
00007
00008
00009
00010 #include <OpenTissue/configuration.h>
00011
00012 #include <boost/cast.hpp>
00013
00014
00015 namespace OpenTissue
00016 {
00017
00018 namespace math
00019 {
00020
00025 template <typename T,typename T2>
00026 inline T trillinear(
00027 T const & d000
00028 , T const & d001
00029 , T const & d010
00030 , T const & d011
00031 , T const & d100
00032 , T const & d101
00033 , T const & d110
00034 , T const & d111
00035 , T2 const & s
00036 , T2 const & t
00037 , T2 const & u
00038 )
00039 {
00040
00041
00042
00043
00044
00045
00046 T x00 = boost::numeric_cast<T>( (d001 - d000)*s + d000 );
00047 T x01 = boost::numeric_cast<T>( (d011 - d010)*s + d010 );
00048 T x10 = boost::numeric_cast<T>( (d101 - d100)*s + d100 );
00049 T x11 = boost::numeric_cast<T>( (d111 - d110)*s + d110 );
00050 T y0 = boost::numeric_cast<T>( ( x01 - x00)*t + x00 );
00051 T y1 = boost::numeric_cast<T>( ( x11 - x10)*t + x10 );
00052 return boost::numeric_cast<T>( (y1-y0)*u + y0 );
00053 }
00054
00055 }
00056
00057 }
00058
00059
00060 #endif