28 #include "../common/WAssert.h"
29 #include "../common/WLimits.h"
30 #include "datastructures/WValueSetHistogram.h"
31 #include "WDataSetSingle.h"
33 #include "WDataSetScalar.h"
39 boost::shared_ptr< WGrid > newGrid )
42 WAssert( newValueSet,
"No value set given." );
43 WAssert( newGrid,
"No grid given." );
44 WAssert( newValueSet->size() == newGrid->size(),
"Number of values unequal number of positions in grid." );
45 WAssert( newValueSet->order() == 0,
"The value set does not contain scalars." );
95 boost::shared_ptr< WGridRegular3D > grid = boost::shared_dynamic_cast<
WGridRegular3D >(
m_grid );
97 WAssert( grid,
"This data set has a grid whose type is not yet supported for interpolation." );
98 WAssert( grid->isNotRotated(),
"Only feasible for grids that are only translated or scaled so far." );
100 "Only implemented for scalar values so far." );
102 bool isInside =
true;
103 size_t cellId = grid->getCellId( pos, &isInside );
111 std::vector< size_t > vertexIds = grid->getCellVertexIds( cellId );
113 WPosition localPos = pos - grid->getPosition( vertexIds[0] );
115 double lambdaX = localPos[0] / grid->getOffsetX();
116 double lambdaY = localPos[1] / grid->getOffsetY();
117 double lambdaZ = localPos[2] / grid->getOffsetZ();
118 std::vector< double > h( 8 );
128 h[0] = ( 1 - lambdaX ) * ( 1 - lambdaY ) * ( 1 - lambdaZ );
129 h[1] = ( lambdaX ) * ( 1 - lambdaY ) * ( 1 - lambdaZ );
130 h[2] = ( 1 - lambdaX ) * ( lambdaY ) * ( 1 - lambdaZ );
131 h[3] = ( lambdaX ) * ( lambdaY ) * ( 1 - lambdaZ );
132 h[4] = ( 1 - lambdaX ) * ( 1 - lambdaY ) * ( lambdaZ );
133 h[5] = ( lambdaX ) * ( 1 - lambdaY ) * ( lambdaZ );
134 h[6] = ( 1 - lambdaX ) * ( lambdaY ) * ( lambdaZ );
135 h[7] = ( lambdaX ) * ( lambdaY ) * ( lambdaZ );
138 for(
size_t i = 0; i < 8; ++i )
149 boost::shared_ptr< WGridRegular3D > grid = boost::shared_dynamic_cast<
WGridRegular3D >(
m_grid );
150 size_t id = x + y * grid->
getNbCoordsX() + z * grid->getNbCoordsX() * grid->getNbCoordsY();