657 V3d clampedVsP(std::max(0.5, vsP.x),
658 std::max(0.5, vsP.y),
659 std::max(0.5, vsP.z));
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));
674 im = std::max(dataWindow.min.x, std::min(c.x, dataWindow.max.x));
675 jm = std::max(dataWindow.min.y, std::min(c.y, dataWindow.max.y));
676 km = std::max(dataWindow.min.z, std::min(c.z, dataWindow.max.z));
677 int im_1, jm_1, km_1;
678 im_1 = std::max(dataWindow.min.x, std::min(im - 1, dataWindow.max.x));
679 jm_1 = std::max(dataWindow.min.y, std::min(jm - 1, dataWindow.max.y));
680 km_1 = std::max(dataWindow.min.z, std::min(km - 1, dataWindow.max.z));
682 im1 = std::max(dataWindow.min.x, std::min(im + 1, dataWindow.max.x));
683 jm1 = std::max(dataWindow.min.y, std::min(jm + 1, dataWindow.max.y));
684 km1 = std::max(dataWindow.min.z, std::min(km + 1, dataWindow.max.z));
686 im2 = std::max(dataWindow.min.x, std::min(im + 2, dataWindow.max.x));
687 jm2 = std::max(dataWindow.min.y, std::min(jm + 2, dataWindow.max.y));
688 km2 = std::max(dataWindow.min.z, std::min(km + 2, dataWindow.max.z));
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);
FIELD3D_VEC3_T< T > floor(const FIELD3D_VEC3_T< T > &v)
Floor function for Vec3.
const Box3i & dataWindow() const
Returns the data window. Any coordinate inside this window is safe to pass to value() in the Field su...
virtual Data_T value(int i, int j, int k) const =0
Read access to a voxel. The coordinates are in integer voxel space .
Data_T monotonicCubicInterpolant(const Data_T &f1, const Data_T &f2, const Data_T &f3, const Data_T &f4, double t)
Monotonic cubic interpolation References: http://en.wikipedia.org/wiki/Monotone_cubic_interpolation h...