46 #ifndef _INCLUDED_Field3D_FieldInterp_H_
47 #define _INCLUDED_Field3D_FieldInterp_H_
71 template <
class Data_T>
79 typedef boost::intrusive_ptr<FieldInterp>
Ptr;
135 template <
class Data_T>
143 typedef boost::intrusive_ptr<LinearFieldInterp>
Ptr;
152 return "LinearFieldInterp";
194 template <
class Data_T>
202 typedef boost::intrusive_ptr<CubicFieldInterp>
Ptr;
211 return "CubicFieldInterp";
252 template <
class Field_T>
260 typedef boost::intrusive_ptr<LinearGenericFieldInterp>
Ptr;
269 return "LinearGenericFieldInterp";
311 template <
class Data_T>
319 typedef boost::intrusive_ptr<LinearMACFieldInterp>
Ptr;
328 return "LinearMACFieldInterp";
343 const V3d &vsP)
const;
374 template <
class Field_T>
382 typedef boost::intrusive_ptr<CubicGenericFieldInterp>
Ptr;
391 return "CubicGenericFieldInterp";
433 template <
class Data_T>
441 typedef boost::intrusive_ptr<CubicMACFieldInterp>
Ptr;
450 return "CubicMACFieldInterp";
492 template <
class Data_T>
500 typedef boost::intrusive_ptr<ProceduralFieldLookup>
Ptr;
509 return "ProceduralFieldLookup";
545 template <
class Data_T>
551 f->
mapping()->worldToVoxel(wsP, vsP);
552 return interp.
sample(*f, vsP);
574 template <
class S,
class T>
575 FIELD3D_VEC3_T<T>
operator * (S s,
const FIELD3D_VEC3_T<T> vec);
585 template <
class Data_T>
587 const Data_T &f3,
const Data_T &f4,
596 template <
class Data_T>
598 const Data_T &f3,
const Data_T &f4,
605 template <
class Data_T>
607 const V3d &vsP)
const
612 FIELD3D_VEC3_T<double> p(vsP - FIELD3D_VEC3_T<double>(0.5));
615 V3i c1(static_cast<int>(
floor(p.x)),
616 static_cast<int>(
floor(p.y)),
617 static_cast<int>(
floor(p.z)));
621 FIELD3D_VEC3_T<double> f1(
static_cast<FIELD3D_VEC3_T<double>
>(c2) - p);
623 FIELD3D_VEC3_T<double> f2(
static_cast<FIELD3D_VEC3_T<double>
>(1.0) - f1);
636 return static_cast<Data_T>
637 (f1.x * (f1.y * (f1.z * data.
value(c1.x, c1.y, c1.z) +
638 f2.z * data.
value(c1.x, c1.y, c2.z)) +
639 f2.y * (f1.z * data.
value(c1.x, c2.y, c1.z) +
640 f2.z * data.
value(c1.x, c2.y, c2.z))) +
641 f2.x * (f1.y * (f1.z * data.
value(c2.x, c1.y, c1.z) +
642 f2.z * data.
value(c2.x, c1.y, c2.z)) +
643 f2.y * (f1.z * data.
value(c2.x, c2.y, c1.z) +
644 f2.z * data.
value(c2.x, c2.y, c2.z))));
650 template <
class Data_T>
652 const V3d &vsP)
const
660 FIELD3D_VEC3_T<double> p(clampedVsP - FIELD3D_VEC3_T<double>(0.5));
664 static_cast<int>(
floor(p.y)),
665 static_cast<int>(
floor(p.z)));
668 FIELD3D_VEC3_T<double> t(p -
static_cast<FIELD3D_VEC3_T<double>
>(c));
677 int im_1, jm_1, km_1;
692 data.
value(im_1, jm_1, km),
693 data.
value(im_1, jm_1, km1),
694 data.
value(im_1, jm_1, km2), t.z);
696 data.
value(im_1, jm, km),
697 data.
value(im_1, jm, km1),
698 data.
value(im_1, jm, km2), t.z);
700 data.
value(im_1, jm1, km),
701 data.
value(im_1, jm1, km1),
702 data.
value(im_1, jm1, km2), t.z);
704 data.
value(im_1, jm2, km),
705 data.
value(im_1, jm2, km1),
706 data.
value(im_1, jm2, km2), t.z);
709 data.
value(im, jm_1, km),
710 data.
value(im, jm_1, km1),
711 data.
value(im, jm_1, km2), t.z);
713 data.
value(im, jm, km),
714 data.
value(im, jm, km1),
715 data.
value(im, jm, km2), t.z);
717 data.
value(im, jm1, km),
718 data.
value(im, jm1, km1),
719 data.
value(im, jm1, km2), t.z);
721 data.
value(im, jm2, km),
722 data.
value(im, jm2, km1),
723 data.
value(im, jm2, km2), t.z);
726 data.
value(im1, jm_1, km),
727 data.
value(im1, jm_1, km1),
728 data.
value(im1, jm_1, km2), t.z);
730 data.
value(im1, jm, km),
731 data.
value(im1, jm, km1),
732 data.
value(im1, jm, km2), t.z);
734 data.
value(im1, jm1, km),
735 data.
value(im1, jm1, km1),
736 data.
value(im1, jm1, km2), t.z);
738 data.
value(im1, jm2, km),
739 data.
value(im1, jm2, km1),
740 data.
value(im1, jm2, km2), t.z);
743 data.
value(im2, jm_1, km),
744 data.
value(im2, jm_1, km1),
745 data.
value(im2, jm_1, km2), t.z);
747 data.
value(im2, jm, km),
748 data.
value(im2, jm, km1),
749 data.
value(im2, jm, km2), t.z);
751 data.
value(im2, jm1, km),
752 data.
value(im2, jm1, km1),
753 data.
value(im2, jm1, km2), t.z);
755 data.
value(im2, jm2, km),
756 data.
value(im2, jm2, km1),
757 data.
value(im2, jm2, km2), t.z);
771 template <
class Field_T>
772 typename Field_T::value_type
774 const V3d &vsP)
const
776 typedef typename Field_T::value_type Data_T;
781 FIELD3D_VEC3_T<double> p(vsP - FIELD3D_VEC3_T<double>(0.5));
784 V3i c1(static_cast<int>(
floor(p.x)),
785 static_cast<int>(
floor(p.y)),
786 static_cast<int>(
floor(p.z)));
790 FIELD3D_VEC3_T<double> f1(
static_cast<FIELD3D_VEC3_T<double>
>(c2) - p);
792 FIELD3D_VEC3_T<double> f2(
static_cast<FIELD3D_VEC3_T<double>
>(1.0) - f1);
794 const Box3i &dataWindow = data.dataWindow();
804 return static_cast<Data_T>
805 (f1.x * (f1.y * (f1.z * data.fastValue(c1.x, c1.y, c1.z) +
806 f2.z * data.fastValue(c1.x, c1.y, c2.z)) +
807 f2.y * (f1.z * data.fastValue(c1.x, c2.y, c1.z) +
808 f2.z * data.fastValue(c1.x, c2.y, c2.z))) +
809 f2.x * (f1.y * (f1.z * data.fastValue(c2.x, c1.y, c1.z) +
810 f2.z * data.fastValue(c2.x, c1.y, c2.z)) +
811 f2.y * (f1.z * data.fastValue(c2.x, c2.y, c1.z) +
812 f2.z * data.fastValue(c2.x, c2.y, c2.z))));
817 template <
class Data_T>
819 const V3d &vsP)
const
829 FIELD3D_VEC3_T<double> p(vsP.x , vsP.y - 0.5, vsP.z - 0.5);
834 V3i c1(static_cast<int>(
floor(p.x)),
835 static_cast<int>(
floor(p.y)),
836 static_cast<int>(
floor(p.z)));
842 FIELD3D_VEC3_T<double> f1(
static_cast<FIELD3D_VEC3_T<double>
>(c2) - p);
844 FIELD3D_VEC3_T<double> f2(
static_cast<FIELD3D_VEC3_T<double>
>(1.0) - f1);
854 ret.x = (f1.x * (f1.y * (f1.z * data.
u(c1.x, c1.y, c1.z) +
855 f2.z * data.
u(c1.x, c1.y, c2.z)) +
856 f2.y * (f1.z * data.
u(c1.x, c2.y, c1.z) +
857 f2.z * data.
u(c1.x, c2.y, c2.z))) +
858 f2.x * (f1.y * (f1.z * data.
u(c2.x, c1.y, c1.z) +
859 f2.z * data.
u(c2.x, c1.y, c2.z)) +
860 f2.y * (f1.z * data.
u(c2.x, c2.y, c1.z) +
861 f2.z * data.
u(c2.x, c2.y, c2.z))));
865 p.setValue(vsP.x - 0.5, vsP.y , vsP.z - 0.5);
868 c1.x = static_cast<int>(
floor(p.x ));
869 c1.y = static_cast<int>(
floor(p.y ));
870 c1.z = static_cast<int>(
floor(p.z ));
878 f1.setValue(
static_cast<FIELD3D_VEC3_T<double>
>(c2) - p);
880 f2.setValue(
static_cast<FIELD3D_VEC3_T<double>
>(1.0) - f1);
890 ret.y = (f1.x * (f1.y * (f1.z * data.
v(c1.x, c1.y, c1.z) +
891 f2.z * data.
v(c1.x, c1.y, c2.z)) +
892 f2.y * (f1.z * data.
v(c1.x, c2.y, c1.z) +
893 f2.z * data.
v(c1.x, c2.y, c2.z))) +
894 f2.x * (f1.y * (f1.z * data.
v(c2.x, c1.y, c1.z) +
895 f2.z * data.
v(c2.x, c1.y, c2.z)) +
896 f2.y * (f1.z * data.
v(c2.x, c2.y, c1.z) +
897 f2.z * data.
v(c2.x, c2.y, c2.z))));
901 p.setValue(vsP.x - 0.5 , vsP.y - 0.5, vsP.z);
904 c1.x = static_cast<int>(
floor(p.x ));
905 c1.y = static_cast<int>(
floor(p.y ));
906 c1.z = static_cast<int>(
floor(p.z ));
914 f1.setValue(
static_cast<FIELD3D_VEC3_T<double>
>(c2) - p);
916 f2.setValue(
static_cast<FIELD3D_VEC3_T<double>
>(1.0) - f1);
926 ret.z = (f1.x * (f1.y * (f1.z * data.
w(c1.x, c1.y, c1.z) +
927 f2.z * data.
w(c1.x, c1.y, c2.z)) +
928 f2.y * (f1.z * data.
w(c1.x, c2.y, c1.z) +
929 f2.z * data.
w(c1.x, c2.y, c2.z))) +
930 f2.x * (f1.y * (f1.z * data.
w(c2.x, c1.y, c1.z) +
931 f2.z * data.
w(c2.x, c1.y, c2.z)) +
932 f2.y * (f1.z * data.
w(c2.x, c2.y, c1.z) +
933 f2.z * data.
w(c2.x, c2.y, c2.z))));
940 template <
class Data_T>
943 const V3d &vsP)
const
952 FIELD3D_VEC3_T<double> p;
954 FIELD3D_VEC3_T<double> f1;
955 FIELD3D_VEC3_T<double> f2;
961 p.setValue<>(vsP.x, vsP.y-0.5, vsP.z-0.5);
964 c1.x = static_cast<int>(
floor(p.x));
965 c1.y = static_cast<int>(
floor(p.y));
966 c1.z = static_cast<int>(
floor(p.z));
974 f1.setValue(
static_cast<FIELD3D_VEC3_T<double>
>(c2) - p);
976 f2.setValue(
static_cast<FIELD3D_VEC3_T<double>
>(1.0) - f1);
986 ret = (f1.x * (f1.y * (f1.z * data.
u(c1.x, c1.y, c1.z) +
987 f2.z * data.
u(c1.x, c1.y, c2.z)) +
988 f2.y * (f1.z * data.
u(c1.x, c2.y, c1.z) +
989 f2.z * data.
u(c1.x, c2.y, c2.z))) +
990 f2.x * (f1.y * (f1.z * data.
u(c2.x, c1.y, c1.z) +
991 f2.z * data.
u(c2.x, c1.y, c2.z)) +
992 f2.y * (f1.z * data.
u(c2.x, c2.y, c1.z) +
993 f2.z * data.
u(c2.x, c2.y, c2.z))));
999 p.setValue(vsP.x-0.5, vsP.y, vsP.z-0.5);
1002 c1.x = static_cast<int>(
floor(p.x ));
1003 c1.y = static_cast<int>(
floor(p.y ));
1004 c1.z = static_cast<int>(
floor(p.z ));
1012 f1.setValue(
static_cast<FIELD3D_VEC3_T<double>
>(c2) - p);
1014 f2.setValue(
static_cast<FIELD3D_VEC3_T<double>
>(1.0) - f1);
1024 ret = (f1.x * (f1.y * (f1.z * data.
v(c1.x, c1.y, c1.z) +
1025 f2.z * data.
v(c1.x, c1.y, c2.z)) +
1026 f2.y * (f1.z * data.
v(c1.x, c2.y, c1.z) +
1027 f2.z * data.
v(c1.x, c2.y, c2.z))) +
1028 f2.x * (f1.y * (f1.z * data.
v(c2.x, c1.y, c1.z) +
1029 f2.z * data.
v(c2.x, c1.y, c2.z)) +
1030 f2.y * (f1.z * data.
v(c2.x, c2.y, c1.z) +
1031 f2.z * data.
v(c2.x, c2.y, c2.z))));
1037 p.setValue(vsP.x-0.5, vsP.y-0.5, vsP.z);
1040 c1.x = static_cast<int>(
floor(p.x ));
1041 c1.y = static_cast<int>(
floor(p.y ));
1042 c1.z = static_cast<int>(
floor(p.z ));
1050 f1.setValue(
static_cast<FIELD3D_VEC3_T<double>
>(c2) - p);
1052 f2.setValue(
static_cast<FIELD3D_VEC3_T<double>
>(1.0) - f1);
1062 ret = (f1.x * (f1.y * (f1.z * data.
w(c1.x, c1.y, c1.z) +
1063 f2.z * data.
w(c1.x, c1.y, c2.z)) +
1064 f2.y * (f1.z * data.
w(c1.x, c2.y, c1.z) +
1065 f2.z * data.
w(c1.x, c2.y, c2.z))) +
1066 f2.x * (f1.y * (f1.z * data.
w(c2.x, c1.y, c1.z) +
1067 f2.z * data.
w(c2.x, c1.y, c2.z)) +
1068 f2.y * (f1.z * data.
w(c2.x, c2.y, c1.z) +
1069 f2.z * data.
w(c2.x, c2.y, c2.z))));
1081 template <
class Field_T>
1082 typename Field_T::value_type
1084 const V3d &vsP)
const
1086 typedef typename Field_T::value_type Data_T;
1094 FIELD3D_VEC3_T<double> p(clampedVsP - FIELD3D_VEC3_T<double>(0.5));
1096 const Box3i &dataWindow = data.dataWindow();
1099 V3i c(static_cast<int>(
floor(p.x)),
1100 static_cast<int>(
floor(p.y)),
1101 static_cast<int>(
floor(p.z)));
1104 FIELD3D_VEC3_T<double> t(p -
static_cast<FIELD3D_VEC3_T<double>
>(c));
1111 int im_1, jm_1, km_1;
1125 data.fastValue(im_1, jm_1, km),
1126 data.fastValue(im_1, jm_1, km1),
1127 data.fastValue(im_1, jm_1, km2), t.z);
1129 data.fastValue(im_1, jm, km),
1130 data.fastValue(im_1, jm, km1),
1131 data.fastValue(im_1, jm, km2), t.z);
1133 data.fastValue(im_1, jm1, km),
1134 data.fastValue(im_1, jm1, km1),
1135 data.fastValue(im_1, jm1, km2), t.z);
1137 data.fastValue(im_1, jm2, km),
1138 data.fastValue(im_1, jm2, km1),
1139 data.fastValue(im_1, jm2, km2), t.z);
1142 data.fastValue(im, jm_1, km),
1143 data.fastValue(im, jm_1, km1),
1144 data.fastValue(im, jm_1, km2), t.z);
1146 data.fastValue(im, jm, km),
1147 data.fastValue(im, jm, km1),
1148 data.fastValue(im, jm, km2), t.z);
1150 data.fastValue(im, jm1, km),
1151 data.fastValue(im, jm1, km1),
1152 data.fastValue(im, jm1, km2), t.z);
1154 data.fastValue(im, jm2, km),
1155 data.fastValue(im, jm2, km1),
1156 data.fastValue(im, jm2, km2), t.z);
1159 data.fastValue(im1, jm_1, km),
1160 data.fastValue(im1, jm_1, km1),
1161 data.fastValue(im1, jm_1, km2), t.z);
1163 data.fastValue(im1, jm, km),
1164 data.fastValue(im1, jm, km1),
1165 data.fastValue(im1, jm, km2), t.z);
1167 data.fastValue(im1, jm1, km),
1168 data.fastValue(im1, jm1, km1),
1169 data.fastValue(im1, jm1, km2), t.z);
1171 data.fastValue(im1, jm2, km),
1172 data.fastValue(im1, jm2, km1),
1173 data.fastValue(im1, jm2, km2), t.z);
1176 data.fastValue(im2, jm_1, km),
1177 data.fastValue(im2, jm_1, km1),
1178 data.fastValue(im2, jm_1, km2), t.z);
1180 data.fastValue(im2, jm, km),
1181 data.fastValue(im2, jm, km1),
1182 data.fastValue(im2, jm, km2), t.z);
1184 data.fastValue(im2, jm1, km),
1185 data.fastValue(im2, jm1, km1),
1186 data.fastValue(im2, jm1, km2), t.z);
1188 data.fastValue(im2, jm2, km),
1189 data.fastValue(im2, jm2, km1),
1190 data.fastValue(im2, jm2, km2), t.z);
1204 template <
class Data_T>
1206 const V3d &vsP)
const
1208 typedef typename Data_T::BaseType T;
1223 FIELD3D_VEC3_T<double> p(vsP.x,
1225 clampedVsP.z - 0.5);
1228 V3i c(static_cast<int>(
floor(p.x)),
1229 static_cast<int>(
floor(p.y)),
1230 static_cast<int>(
floor(p.z)));
1232 FIELD3D_VEC3_T<double> t(p -
static_cast<FIELD3D_VEC3_T<double>
>(c));
1240 int im_1, jm_1, km_1;
1254 data.
u(im_1, jm_1, km),
1255 data.
u(im_1, jm_1, km1),
1256 data.
u(im_1, jm_1, km2), t.z);
1258 data.
u(im_1, jm, km),
1259 data.
u(im_1, jm, km1),
1260 data.
u(im_1, jm, km2), t.z);
1262 data.
u(im_1, jm1, km),
1263 data.
u(im_1, jm1, km1),
1264 data.
u(im_1, jm1, km2), t.z);
1266 data.
u(im_1, jm2, km),
1267 data.
u(im_1, jm2, km1),
1268 data.
u(im_1, jm2, km2), t.z);
1271 data.
u(im, jm_1, km),
1272 data.
u(im, jm_1, km1),
1273 data.
u(im, jm_1, km2), t.z);
1276 data.
u(im, jm, km1),
1277 data.
u(im, jm, km2), t.z);
1279 data.
u(im, jm1, km),
1280 data.
u(im, jm1, km1),
1281 data.
u(im, jm1, km2), t.z);
1283 data.
u(im, jm2, km),
1284 data.
u(im, jm2, km1),
1285 data.
u(im, jm2, km2), t.z);
1288 data.
u(im1, jm_1, km),
1289 data.
u(im1, jm_1, km1),
1290 data.
u(im1, jm_1, km2), t.z);
1292 data.
u(im1, jm, km),
1293 data.
u(im1, jm, km1),
1294 data.
u(im1, jm, km2), t.z);
1296 data.
u(im1, jm1, km),
1297 data.
u(im1, jm1, km1),
1298 data.
u(im1, jm1, km2), t.z);
1300 data.
u(im1, jm2, km),
1301 data.
u(im1, jm2, km1),
1302 data.
u(im1, jm2, km2), t.z);
1305 data.
u(im2, jm_1, km),
1306 data.
u(im2, jm_1, km1),
1307 data.
u(im2, jm_1, km2), t.z);
1309 data.
u(im2, jm, km),
1310 data.
u(im2, jm, km1),
1311 data.
u(im2, jm, km2), t.z);
1313 data.
u(im2, jm1, km),
1314 data.
u(im2, jm1, km1),
1315 data.
u(im2, jm1, km2), t.z);
1317 data.
u(im2, jm2, km),
1318 data.
u(im2, jm2, km1),
1319 data.
u(im2, jm2, km2), t.z);
1332 p.setValue(clampedVsP.x - 0.5, vsP.y , clampedVsP.z - 0.5);
1335 c.x = static_cast<int>(
floor(p.x));
1336 c.y = static_cast<int>(
floor(p.y));
1337 c.z = static_cast<int>(
floor(p.z));
1339 t.setValue(p -
static_cast<FIELD3D_VEC3_T<double>
>(c));
1346 int im_1, jm_1, km_1;
1360 data.
v(im_1, jm_1, km),
1361 data.
v(im_1, jm_1, km1),
1362 data.
v(im_1, jm_1, km2), t.z);
1364 data.
v(im_1, jm, km),
1365 data.
v(im_1, jm, km1),
1366 data.
v(im_1, jm, km2), t.z);
1368 data.
v(im_1, jm1, km),
1369 data.
v(im_1, jm1, km1),
1370 data.
v(im_1, jm1, km2), t.z);
1372 data.
v(im_1, jm2, km),
1373 data.
v(im_1, jm2, km1),
1374 data.
v(im_1, jm2, km2), t.z);
1377 data.
v(im, jm_1, km),
1378 data.
v(im, jm_1, km1),
1379 data.
v(im, jm_1, km2), t.z);
1382 data.
v(im, jm, km1),
1383 data.
v(im, jm, km2), t.z);
1385 data.
v(im, jm1, km),
1386 data.
v(im, jm1, km1),
1387 data.
v(im, jm1, km2), t.z);
1389 data.
v(im, jm2, km),
1390 data.
v(im, jm2, km1),
1391 data.
v(im, jm2, km2), t.z);
1394 data.
v(im1, jm_1, km),
1395 data.
v(im1, jm_1, km1),
1396 data.
v(im1, jm_1, km2), t.z);
1398 data.
v(im1, jm, km),
1399 data.
v(im1, jm, km1),
1400 data.
v(im1, jm, km2), t.z);
1402 data.
v(im1, jm1, km),
1403 data.
v(im1, jm1, km1),
1404 data.
v(im1, jm1, km2), t.z);
1406 data.
v(im1, jm2, km),
1407 data.
v(im1, jm2, km1),
1408 data.
v(im1, jm2, km2), t.z);
1411 data.
v(im2, jm_1, km),
1412 data.
v(im2, jm_1, km1),
1413 data.
v(im2, jm_1, km2), t.z);
1415 data.
v(im2, jm, km),
1416 data.
v(im2, jm, km1),
1417 data.
v(im2, jm, km2), t.z);
1419 data.
v(im2, jm1, km),
1420 data.
v(im2, jm1, km1),
1421 data.
v(im2, jm1, km2), t.z);
1423 data.
v(im2, jm2, km),
1424 data.
v(im2, jm2, km1),
1425 data.
v(im2, jm2, km2), t.z);
1437 p.setValue(clampedVsP.x - 0.5 , clampedVsP.y - 0.5, vsP.z);
1440 c.x = static_cast<int>(
floor(p.x));
1441 c.y = static_cast<int>(
floor(p.y));
1442 c.z = static_cast<int>(
floor(p.z));
1444 t.setValue(p -
static_cast<FIELD3D_VEC3_T<double>
>(c));
1451 int im_1, jm_1, km_1;
1465 data.
w(im_1, jm_1, km),
1466 data.
w(im_1, jm_1, km1),
1467 data.
w(im_1, jm_1, km2), t.z);
1469 data.
w(im_1, jm, km),
1470 data.
w(im_1, jm, km1),
1471 data.
w(im_1, jm, km2), t.z);
1473 data.
w(im_1, jm1, km),
1474 data.
w(im_1, jm1, km1),
1475 data.
w(im_1, jm1, km2), t.z);
1477 data.
w(im_1, jm2, km),
1478 data.
w(im_1, jm2, km1),
1479 data.
w(im_1, jm2, km2), t.z);
1482 data.
w(im, jm_1, km),
1483 data.
w(im, jm_1, km1),
1484 data.
w(im, jm_1, km2), t.z);
1487 data.
w(im, jm, km1),
1488 data.
w(im, jm, km2), t.z);
1490 data.
w(im, jm1, km),
1491 data.
w(im, jm1, km1),
1492 data.
w(im, jm1, km2), t.z);
1494 data.
w(im, jm2, km),
1495 data.
w(im, jm2, km1),
1496 data.
w(im, jm2, km2), t.z);
1499 data.
w(im1, jm_1, km),
1500 data.
w(im1, jm_1, km1),
1501 data.
w(im1, jm_1, km2), t.z);
1503 data.
w(im1, jm, km),
1504 data.
w(im1, jm, km1),
1505 data.
w(im1, jm, km2), t.z);
1507 data.
w(im1, jm1, km),
1508 data.
w(im1, jm1, km1),
1509 data.
w(im1, jm1, km2), t.z);
1511 data.
w(im1, jm2, km),
1512 data.
w(im1, jm2, km1),
1513 data.
w(im1, jm2, km2), t.z);
1516 data.
w(im2, jm_1, km),
1517 data.
w(im2, jm_1, km1),
1518 data.
w(im2, jm_1, km2), t.z);
1520 data.
w(im2, jm, km),
1521 data.
w(im2, jm, km1),
1522 data.
w(im2, jm, km2), t.z);
1524 data.
w(im2, jm1, km),
1525 data.
w(im2, jm1, km1),
1526 data.
w(im2, jm1, km2), t.z);
1528 data.
w(im2, jm2, km),
1529 data.
w(im2, jm2, km1),
1530 data.
w(im2, jm2, km2), t.z);
1545 template <
class Data_T>
1548 const V3d &vsP)
const
1551 V3d lsP = vsP * voxelScale;
1557 template <
class S,
class T>
1560 return FIELD3D_VEC3_T<T>(vec.x * s, vec.y * s, vec.z * s);
1569 T d_k = T(.5) * (f3 - f1);
1570 T d_k1 = T(.5) * (f4 - f2);
1571 T delta_k = f3 - f2;
1573 if (delta_k == static_cast<T>(0)) {
1574 d_k = static_cast<T>(0);
1575 d_k1 = static_cast<T>(0);
1580 T a2 = (T(3) * delta_k) - (T(2) * d_k) - d_k1;
1581 T a3 = d_k + d_k1 - (T(2) * delta_k);
1587 return a3 * t3 + a2 * t2 + a1 * t1 + a0;
1596 template <
class Data_T>
1598 const Data_T &f3,
const Data_T &f4,
1601 typedef typename Data_T::BaseType T;
1603 Data_T d_k = T(.5) * (f3 - f1);
1604 Data_T d_k1 = T(.5) * (f4 - f2);
1605 Data_T delta_k = f3 - f2;
1607 for (
int i = 0; i < 3; i++) {
1608 if (delta_k[i] == static_cast<T>(0)) {
1609 d_k[i] = static_cast<T>(0);
1610 d_k1[i]= static_cast<T>(0);
1616 Data_T a2 = (delta_k * T(3)) - (d_k * T(2)) - d_k1;
1617 Data_T a3 = d_k + d_k1 - (delta_k * T(2));
1623 return a3 * t3 + a2 * t2 + a1 * t1 + a0;
1633 const V3h &f3,
const V3h &f4,
double t)
1643 const V3f &f3,
const V3f &f4,
double t)
1653 const V3d &f3,
const V3d &f4,
double t)
1664 #endif // Include guard