653{
654
655
656
657 V3d clampedVsP(std::max(0.5, vsP.x),
658 std::max(0.5, vsP.y),
659 std::max(0.5, vsP.z));
661
662
664 static_cast<int>(
floor(p.y)),
665 static_cast<int>(
floor(p.z)));
666
667
669
671
672
673 int im, jm, km;
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));
681 int im1, jm1, km1;
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));
685 int im2, jm2, km2;
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));
689
690
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);
707
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);
724
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);
741
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);
758
763
765
766 return z0;
767}
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...
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 .
FIELD3D_VEC3_T< T > floor(const FIELD3D_VEC3_T< T > &v)
Floor function for Vec3.