820{
821
822
823
824
826
827 Data_T ret;
828
830
831
832
833
834 V3i c1(
static_cast<int>(
floor(p.x)),
835 static_cast<int>(
floor(p.y)),
836 static_cast<int>(
floor(p.z)));
837
838
840
841
843
845
846
847 c1.x = std::min(dataWindow.max.x + 1, std::max(dataWindow.min.x, c1.x));
848 c1.y = std::min(dataWindow.max.y, std::max(dataWindow.min.y, c1.y));
849 c1.z = std::min(dataWindow.max.z, std::max(dataWindow.min.z, c1.z));
850 c2.x = std::min(dataWindow.max.x + 1, std::max(dataWindow.min.x, c2.x));
851 c2.y = std::min(dataWindow.max.y, std::max(dataWindow.min.y, c2.y));
852 c2.z = std::min(dataWindow.max.z, std::max(dataWindow.min.z, c2.z));
853
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))));
862
863
864
865 p.setValue(vsP.x - 0.5, vsP.y , vsP.z - 0.5);
866
867
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 ));
871
872
873 c2.x = c1.x + 1;
874 c2.y = c1.y + 1;
875 c2.z = c1.z + 1;
876
877
879
881
882
883 c1.x = std::min(dataWindow.max.x, std::max(dataWindow.min.x, c1.x));
884 c1.y = std::min(dataWindow.max.y + 1, std::max(dataWindow.min.y, c1.y));
885 c1.z = std::min(dataWindow.max.z, std::max(dataWindow.min.z, c1.z));
886 c2.x = std::min(dataWindow.max.x, std::max(dataWindow.min.x, c2.x));
887 c2.y = std::min(dataWindow.max.y + 1, std::max(dataWindow.min.y, c2.y));
888 c2.z = std::min(dataWindow.max.z, std::max(dataWindow.min.z, c2.z));
889
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))));
898
899
900
901 p.setValue(vsP.x - 0.5 , vsP.y - 0.5, vsP.z);
902
903
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 ));
907
908
909 c2.x = c1.x + 1;
910 c2.y = c1.y + 1;
911 c2.z = c1.z + 1;
912
913
915
917
918
919 c1.x = std::min(dataWindow.max.x, std::max(dataWindow.min.x, c1.x));
920 c1.y = std::min(dataWindow.max.y, std::max(dataWindow.min.y, c1.y));
921 c1.z = std::min(dataWindow.max.z + 1, std::max(dataWindow.min.z, c1.z));
922 c2.x = std::min(dataWindow.max.x, std::max(dataWindow.min.x, c2.x));
923 c2.y = std::min(dataWindow.max.y, std::max(dataWindow.min.y, c2.y));
924 c2.z = std::min(dataWindow.max.z + 1, std::max(dataWindow.min.z, c2.z));
925
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))));
934
935 return ret;
936}
const Box3i & dataWindow() const
Returns the data window. Any coordinate inside this window is safe to pass to value() in the Field su...
const real_t & w(int i, int j, int k) const
Read access to value on w-facing wall.
const real_t & u(int i, int j, int k) const
Read access to value on u-facing wall.
const real_t & v(int i, int j, int k) const
Read access to value on v-facing wall.
FIELD3D_VEC3_T< T > floor(const FIELD3D_VEC3_T< T > &v)
Floor function for Vec3.